salut tout le monde !!
donc j'ais un problème sur les chaines
EX: "12+20+4" la fonction retournera 36
ms je n'arrive pas le faire
et merci
salut tout le monde !!
donc j'ais un problème sur les chaines
EX: "12+20+4" la fonction retournera 36
ms je n'arrive pas le faire
et merci
Bonjour,
Il faut parcourir la chaîne de caractères pour en extraire les constituants
transformer ceux-ci en nombre si nécessaire.
Et traiter les commandes.
La séparation des constituants : "12", "+", "20", "+" et "4"
Si le format est connu et fixe (3 nombres séparés par des +), un simple sscanf( buffer , "%d%d%d" , &nb1 , &nb2, &nb3 ); trouve les 3 nombres à ajouter, car le + est un séparateur naturel de nombres!
Sinon c'est beaucoup plus complexe.
Il faut parcourir chacun des caractères et analyser si c'est un chiffre ou un symbole.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int valeurCourante = 0; enum OperationEnCours { Plus, Moins } = Plus; for ( int i = 0 ; i < strlen(buffer) ; ++i ) { if ( buffer[i] >= '0' && buffer[i] <= '9' ) { // c'est un nombre rechercher la fin du nombre // puis extraire le nombre } else if ( buffer[i] == '+' ) { // effectuer l'opération en cours // la prochaine opération à faire sera une addition } else if ( buffer[i] == '-' ) { // effectuer l'opération en cours // la prochaine opération à faire sera une soustraction } else { puts("erreur caractère inattendu!"); } } // finir en effectuant la dernière opération en attente
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int additionstr(char *ch) { int a,s,c; char *p,*q,*m; s=0; m=ch; while(*m) { for(p=m;(*p!='+')&&(*p);p++); c=1; for (q=p-1;(*q!='+');q--) { s+=((*p)-48)*c; c=c*10; } m=p; m++; return s; }
j'ais essayé de la faire avec les pointeur mais je n'arrive pas a le faire vous pouvez me dire c quoi ma faute ???
L'analyse d'une chaîne selon une grammaire donnée est typiquement implémentée avec un automate.
voila le code avec switch mais ça marche pas je sais pas pourquoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int addstr(char *ch) { int s,c,i,etat; etat=1,s=0,c=1; for(i=0;i<strlen(ch);i++); while (i>=0) { switch(etat) { case 1 : while((ch[i]!='+') && (i>=0)) { s+=(ch[i]-48)*c; c=c*10; i--; } etat =0; break; case 0 : c=1; i--; etat =1; break; } } return s; }
Fais un effort de clarté, s'il-te-plaît, ce n'est pas un concours d'obfuscation. Commentaires, descriptions, préconditions.. À quoi correspondent les valeurs d'état (énumération..?) ?
voilà le code final merci beaucoup pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 int addstr(char *ch) { int s,c,i,etat; etat=1,s=0,c=1; for(i=0;i<strlen(ch);i++); while (i>=0) { switch(etat) { case 1 : while((ch[i]>='0' && ch[i]<='9') && (i>=0)) { s+=(ch[i]-48)*c; c=c*10; i--; } etat =0; break; case 0 : c=1; i--; etat =1; break; } } return s; }
Partager