Char*

Résolu
kollibar Messages postés 45 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 31 janvier 2006 - 23 déc. 2004 à 01:18
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008 - 27 déc. 2004 à 11:23
je debute en C et donc je vais poser une question con...

avec une chaine de caractère CHAR* comment je peut faire pour récupérer une sous chaine allant du caractère x(!=0) au caractère y??
j'ai un bouquin qui date de longtemps mais j'ai pas trouvé!

merci
KOLLIBAR bare

10 réponses

cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
23 déc. 2004 à 07:00
en premier tu doit savoir qu'un char * est un pointeur sur chaine de char.
il est donc preferable de noter char [n] qui est un string de n char.

dans ta question on va creer un pointeur sur char *
puis on le deplace dans le string d 'x' position
on va enfin lire le string jusque y en avancant le ptr.

exemple :

char string ={a,b,c,d,e,f,g};
char *ptr;
int x = 2,
y = 6; ptr string; // ou tu peux mettre ptr &string[0] qui est plus explicite

if ( x < strlen (string) ) // testons que x est < a la longueur de string
ptr = ptr + x;
if ( y < strlen (string)) { // meme chose pour y
while (ptr < string + y ) {
// je recupere le contenu de ptr (*ptr)
ptr ++ ; // incrementons ptr
}

Yves
3
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
23 déc. 2004 à 09:04
char string ={a,b,c,d,e,f,g};
=> faux

char string[] ={'a','b','c','d','e','f','g',0};
ou
char string[] ="abcdefg";
3
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
23 déc. 2004 à 11:27
Merci ymca pour cette correction j'ai laisse passe cela, je devais etre mal reveille..
Yves
0
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008
24 déc. 2004 à 20:55
Bonsoir à ts et joyeux noel!!!
Voilà j'ai un petit pb en c++ sur les arbres, il s'agit de creer un arbre qui contient plusieurs champs de type differents ds chaque noeud...Je sais le faire pr un arbre qui contient seulement un caractere ou un entier,je vous donne une partie de mon code...

/*je declares des struct pr chaque champ */
#include
using namespace std;
struct DATE {
int jj,mm,aa; // jour mois année
};
struct ADRESSE{
int Num_piste; //numero de piste oqp par file...
int Num_Sect; // ...... - .... secteur...
};
struct Noeud{
char * Nom_file,*Type_file;
ADRESSE * Adr;
DATE * date;
Noeud *gauche,*droite,*pere ; //sous arbres gauche et droit...
};
class Repertoire{
public:
Noeud * Racine;
void CreerFile( );
Noeud * InsererFile(char *nom,Noeud* courant);
.....
};
void repertoire::CreerFile() {
char reponse,*nom;
Racine=new(Noeud);
Racine->gauche=Racine->droite->Racine->pere=Null;
courant->Nom_file= "toto" ????
/* là je bloque,parce que j'ai +sieurs champs,je me demande si pr le premier noeud il faut initialiser directemt tous les champs,du genre: Racine->X= "Y"; /*

Avec un arbre dont le noeud comprend un seul champ,j'aurais fais simplement Racine->X=element pr stocker element dans X;
J'espère que vs allez comprendr de koi je parle et que vs allez m'aider le + tôt possible,merci...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008
24 déc. 2004 à 20:55
Bonsoir à ts et joyeux noel!!!
Voilà j'ai un petit pb en c++ sur les arbres, il s'agit de creer un arbre qui contient plusieurs champs de type differents ds chaque noeud...Je sais le faire pr un arbre qui contient seulement un caractere ou un entier,je vous donne une partie de mon code...

/*je declares des struct pr chaque champ */
#include
using namespace std;
struct DATE {
int jj,mm,aa; // jour mois année
};
struct ADRESSE{
int Num_piste; //numero de piste oqp par file...
int Num_Sect; // ...... - .... secteur...
};
struct Noeud{
char * Nom_file,*Type_file;
ADRESSE * Adr;
DATE * date;
Noeud *gauche,*droite,*pere ; //sous arbres gauche et droit...
};
class Repertoire{
public:
Noeud * Racine;
void CreerFile( );
Noeud * InsererFile(char *nom,Noeud* courant);
.....
};
void repertoire::CreerFile() {
char reponse,*nom;
Racine=new(Noeud);
Racine->gauche=Racine->droite->Racine->pere=Null;
courant->Nom_file= "toto" ????
/* là je bloque,parce que j'ai +sieurs champs,je me demande si pr le premier noeud il faut initialiser directemt tous les champs,du genre: Racine->X= "Y"; /*

Avec un arbre dont le noeud comprend un seul champ,j'aurais fais simplement Racine->X=element pr stocker element dans X;
J'espère que vs allez comprendr de koi je parle et que vs allez m'aider le + tôt possible,merci...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
27 déc. 2004 à 09:08
courant->Nom_file= "toto" ????
non

il faut soit déclarer un tableau de char soit allouer le tableau avec malloc et y recopier la chaîne avec strcpy.

struct Noeud{
char Nom_file[256],Type_file[256];
ADRESSE * Adr;
DATE * date;
Noeud *gauche,*droite,*pere ; //sous arbres gauche et droit...
};

strcpy(puis courant->Nom_File, "toto");
0
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008
27 déc. 2004 à 11:09
Merci pr ta reponse,je vais essayer tt à l'heure! je suppose que tu veux parler de new pr allouer la memoire,car je suis en c++,mais dis moi pr stocker les autres infos dans le noeud est ce que je vais à chaque fois utiliser strcpy(...)? J'ai pensé à creer une fction Arbre * Saisi_Info() qui fait ce travail pr ttes les variables et puis je ne fais que l'appeler ds InsererFile(... ),merci encore pr ta reponse...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
27 déc. 2004 à 11:20
strcpy est à utiliser pour toutes les chaînes de caractères, pour les autres, c'est une affectation directes. Met directement des structure ADRESSE et DATE dans le noeud plutôt que des pointeurs (cela évitera de faire des allocations multiples d'un noaud, puis des chaînes, puis des sous-structure => faire directement une allocation globales du noeud) :

struct Noeud{
char Nom_file[256];
char Type_file[256];
ADRESSE Adr;
DATE date;
Noeud *gauche,*droite,*pere ; //sous arbres gauche et droit...
};

pour créer et initialisaer un nouveau noeud :
Noeud* Creer()
{
Noeud* n = new Noeud;
strcpy(n->Nom_file, "nom fich");
strcpy(n->Type_file, 'Type fich");
n->Adr.Num_piste = 1234;
n->Adr.Num_Sect = 4567;
n->date.jj = 27;
n->date.mm = 12;
n->date.aa = 2004;

n->gauche = NULL;
n->droite = NULL;
n->pere = NULL;
return n;
}
0
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008
27 déc. 2004 à 11:20
ah oui,tu parle d'allouer de l'espace pr le tableau,alors si je cmprend bien pr chaque type de variable j'aurai un tableau à allouer du genre:

pr les adresses:
courant->ADRESSE=new(Tab_Adr);
courant->ADRESSE->Num_Piste=num_1;
courant->ADRESSE->Num_Sect=num_2;
Pr les DATE:
courant->DATE=new(Tab_Date);
courant->DATE->jj=...

Je vais egalement essayer ça,de tte les façon ça me donne des idées rien que le fait d'avoir lu ça!
0
pmbala Messages postés 30 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 2 avril 2008
27 déc. 2004 à 11:23
ok c bien compris mnt,je crois que ça va marcher,merci bcp vieux et bonne année 2005!!!!!! Merciiiii
0
Rejoignez-nous