Obtenir informations à partir d'un string
Bonjour à tous,
Je suis débutant en C, et je suis venu chercher un peu d'aide.
Je souhaite écrire une procédure qui permet d'obtenir à partir d'un string en entrée, diverses informations sur le string en question : tout d'abord pouvoir reconnaître les différents mots contenu dans le string, les sauvegarder dans un tableau (tableauDeMots), ainsi que la position du début de mot (PositionDansChaine). Le programme que j'ai écrit ci-dessous compile bien mais j'obtiens un segmentation fault. J'ai beaucoup de mal avec les pointeurs pour l'instant, et la je fais appel à des pointeurs de pointeurs, autant dire que je m'y perd très facilement quant à leur utilisation. Un petit coup de pouce de votre part pour y voir plus clair ne serait pas de refus. Je ne précise pas le code de certaines fonctions que j'utilise dans ma procédure car je suis certains de leur bon fonctionnement.
Je vous remercie d'avance,
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| int compteurDeMots (char* chaine){
int compteur=1;
for (int i=1;i<strlen(chaine);i++){
if (estSeparateur(chaine[i])){
compteur+=1;
}
}
return compteur;
}
void CORR_decomposer (char* chaine, int compteur, char*** tableauDeMots ,int* PositionDansChaine[]){
/* On rentre une chaine, et le nombre de mot dans la chaine, on ressort un tableau de chaine ainsi
que la position du début de chaque mot dans la chaine*/
int i,j;
char* res;
**tableauDeMots=malloc(sizeof(int) * compteur);
*PositionDansChaine=malloc(sizeof(int)*compteur);
res=NULL;
j=0; /*marque le début d'un mot*/
for (i=1;i<strlen(chaine);i++){
/* On commence le compteur à 1, le premier caractère ne pouvant être un séparateur*/
if (estSeparateur(chaine[i])){
res=sous_string(chaine,j,i-1);/*on selectionne le mot que l'on a trouvé dans la chaine, i-1 pour ne pas prendre
en compte le séparateur*/
*tableauDeMots[j]=res;
PositionDansChaine[j]=&i;
j=i+1;
}
}
}
int main() {
char** tabDeMots;
int nbreDeMots;
//int* positions;
char* String_a_decomposer = "String a decomposer";
int nbreMot = compteurDeMots(String_a_decomposer);
int *positions;
CORR_decomposer(String_a_decomposer,nbreMot,&tabDeMots,&positions);
int bool1=strcmp(tabDeMots[1],"a");
int bool2=(nbreDeMots==3);
int bool3=(positions[1]==7);
printf("%d",bool1);
return 0;
} |