Char*

[Résolu]
Signaler
Messages postés
45
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
31 janvier 2006
-
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008
-
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

Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005

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
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
char string ={a,b,c,d,e,f,g};
=> faux

char string[] ={'a','b','c','d','e','f','g',0};
ou
char string[] ="abcdefg";
Messages postés
48
Date d'inscription
lundi 29 novembre 2004
Statut
Membre
Dernière intervention
16 mars 2005

Merci ymca pour cette correction j'ai laisse passe cela, je devais etre mal reveille..
Yves
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

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...
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

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...
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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");
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

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...
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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;
}
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

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!
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

ok c bien compris mnt,je crois que ça va marcher,merci bcp vieux et bonne année 2005!!!!!! Merciiiii