Extraction de mots d'une chaîne - C - Programmation
Marsh Posté le 15-02-2007 à 14:31:53
Ca devrait être char delimiters[10], pas char * delimiters[10]. Tu veux un tableau de 10 chars, pas un tableau de 10 char *. Et puis gets() c'est mal car tu ne contrôles pas le nombre de charactères lus ; utilises plutôt fgets().
Marsh Posté le 17-02-2007 à 13:21:39
matafan a écrit : Ca devrait être char delimiters[10], pas char * delimiters[10]. Tu veux un tableau de 10 chars, pas un tableau de 10 char *. |
Oui mais t'as pas remarqué qu'il stocke dans son tableau "delimiters" les pointeurs "argv[i]" ? En fait, niveau syntaxe c'est correct (il stocke un pointeur dans un tableau de pointeurs)... c'est au niveau "logique" que c'est pas bon
lamorkytu a écrit :
|
En faisant ça, si tu passes "+ - ;" à ton programme, t'auras :
(au passage t'auras sauté "delimiters[0]" ce qui est dommage)
Alors qu'en fait, il faudrait que "delimiters[0]" contienne '+', "delimiters[1]" contienne '-' et "delimiters[2]" contienne ';' (tu remarqueras les guillemets simples montrant ici des caractères et non des chaînes de caractères) => fais un "man strtok()" pour mieux comprendre le contenu du paramètre "char *delim"
Marsh Posté le 15-02-2007 à 12:58:10
bonjour tlm
Je dois réaliser, en C, un programme qui doit permettre à partir d'une chaine de caractères d'extraire des mots selon des délimiteurs passés en paramètres.
Petit exemple,à partir de :
>leprogramme "unechaine,àdécou-per" ",.-"
je souhaite obtenir :
>unechaine
>àdécou
>per
Mon problème majeur est que je n'ai pas de niveau en C ^^.
Malgré cela, j'ai une première ébauche (dans cette ébauche, chacun des délimiteurs est passé séparément en paramètre); j'utilise strtok() afin de découper la chaine.
int main(int argc, char *argv[])
{
while(1){
char * str=""; //str est une chaine de caractères à découper
char * pch=""; //pch est une chaine : les caractères restant à découper
char * delimiters[10]; //delimiters : les caractères utilisés pour découper str, 10 maximums
int i=0;
str=argv[1]; //str reçoit la premier argument : la chaîne à découper
//ensuite je boucle : chacun des autres paramètres est inscrit dans 'delimiters'
for (i=1;i<=argc;i++) {
delimiters[i]=argv[i+1];}
//ensuite je découpe la chaine selon les délimiteurs
pch = strtok(str,*delimiters);
while (pch != NULL)
{printf ("%s\n",pch);
pch = strtok (NULL,*delimiters);}
}
return 0;
}
Donc voila mon problème : ça ne marche pas ^^
En plus, je souhaiterais passer tous les délimiteurs en tant qu'un seul paramètre ("*-," par exemple mais est-il possible dans ce cas de prendre l'espace comme paramètre ?
Le premier prototype du programme était :
int main(int argc, char *argv[])
{
while(1){
char str[500]; //fixer une longueur de texte max en nb de caracteres
char * pch;
const char * delimiters[10]; //fixer un nombre de délimiteurs max
printf("Veuillez entrer le texte : " );
gets(&str);
printf("Veuillez entrer les delimiteurs : " );
gets(&delimiters);
pch = strtok(str,delimiters);
while (pch != NULL)
{printf ("%s\n",pch);
pch = strtok(NULL,&delimiters); }
}
return 0;
}
------> ceci marche, mais je veux passer la chaine à découper et les délimiteurs en paramètres !
Merci d'avance à ceux qui sont doués en C ^^
Message édité par lamorkytu le 15-02-2007 à 12:59:08