[C] Analyse des characteres d'une chaine

Résolu
M.V. -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voila mon mini soucis...
Ma chaine string ressemble a cela: nombre operande nombre ( 1 + 1 ou bien 1+ 1 )... ( c'est une chaine de charactere )



do {
valeur1[i]=string[i];
printf("%c",valeur1[i]);
i++;
} while ((string[i]!=(' ','+'));


Ici je veux récupérer mon premier nombre, cela marche bien. S'il y a un espace ou le signe "+", le stockage dans mon tableau "valeur1" s'arrète...

et je n'arrive pas a faire l'équivalent avec un while plus complet

exemple: while ((string[i]!=(' ','+','-',*','/'));

Ca ne marche pas, pouvez vous m'aider a trouver un équivalent qui fonctionne ?
danke
A voir également:

5 réponses

Hector Valdes
 
for(int i = 0; i < strlen(string) ; i++) {
if(isNum(string[i])) {
tab[i] = string[i]
}
}

Pour la fonction isNum(), je sais plus comment ça s'appelle exactement, mes souvenirs de C sont un peu lointains, mais t'en as une qui fait ça.
0
Herve92
 
Il est possible de faire un test d'un caractère (stocké dans string[i]) avec une structure de choix multiple (instruction case).

case (string[i])
{
' ' :
'+' :
'-' :
'*' :
'/' : break;

else

valeur1[i]=string[i];
printf("%c",valeur1[i]);
i++;
}
0
M.V.
 
Il semble que le while ne lit pas ce qui est a gauche de la virgule dans la condition.

j'ai donc fait ceci:

while ((string[i]!=('-'))&&(string[i]!=('+'))&&(string[i]!=('*'))&&(string[i]!=('/')));

qui est un peu plus lourd

Merci.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
C'est clair, c'est plus propre. Je n'ai jamais vu la notation :
string[i]!=(val1,val2)
Tu as oublié l'espace dans ta réponse non ?
Tu peux aussi faire ta porpre fonction "isNum" en mettant les valeurs que tu veux dedans, ça sera plus conci, et si besoin, tu peux l'utiliser ailleurs.
0
M.V.
 
Merci pour vos 2 bonnes idées!
0

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

Posez votre question
M.V.
 
while (isdigit(string[i-1]));

Ca convient aussi, ca permet d'arreter la boucle quand le dernier chiffre est lu !
0