Additions soustraction dans une chaine de caracteres
ld09
Messages postés
9
Statut
Membre
-
nagaD.scar Messages postés 4500 Statut Membre -
nagaD.scar Messages postés 4500 Statut Membre -
Bonjour a tous, je dois rediger une fonction recursive qui recoit une chaine de caracteres composé de chiffres et de signe '+' ou '-' ,par exemple "0+1-4+9" et renvoie le resultat (ici 6)
et j'ai un probleme avec le signe ' -', si je rentre par exemple 2 chiffres negatifs a la suite
(par exemple "0-1-2",le resultat est 1 au lieu de -3).Dans l'exercice on est sur que la chaine de caractere commence par un chiffre.
Voici mon code ,merci d'avance.
et j'ai un probleme avec le signe ' -', si je rentre par exemple 2 chiffres negatifs a la suite
(par exemple "0-1-2",le resultat est 1 au lieu de -3).Dans l'exercice on est sur que la chaine de caractere commence par un chiffre.
Voici mon code ,merci d'avance.
#include <stdio.h>
#define MAX_LENGTH 100
int calc_sum_string(char *s)
{
if(*s=='\0'){
return 0;
}
else if(*s=='+'){
return calc_sum_string(s+1);
}
else if(*s=='-'){
return -1*calc_sum_string(s+1);
}
else
return *s-'0'+calc_sum_string(s+1);
}
int main()
{
char s[MAX_LENGTH];
scanf("%s", s);
printf("%d", calc_sum_string(s));
return 0;
}
1 réponse
-
Salut,
Le problème principale se trouve à ce niveau:return -1*calc_sum_string(s+1);
En effet tu multiplie par -1 et dans le cas présent tu à deux nombres négatifs ... de même si tu fais 1-1+5, le signe est en erreur.
Je jette un oeil et je te redis
naga-
-
Alors franchement pas pratique comme manière de faire, il faut prendre en compte le curseur actuel et le suivant pour determiner ton calcul.
Aussi, tu ne sera qu en mesure de ne gérer que des chiffres ( 0-9 quoi). j ai fais ca:#include <stdio.h> #define MAX_LENGTH 100 int calc_sum_string(char *s) { if(*s=='\0'){return 0;} return (*s=='+' || *s=='-' ? ( (*(s+1)-'0') * ( *s=='+' ? 1 : -1 ) + calc_sum_string(s+2)) : (*s)-'0' + calc_sum_string(s+1)) ; } int main() { char s[MAX_LENGTH]; scanf("%s", s); printf("%d", calc_sum_string(s)); return 0; }
aussi, avec ce code tu peux commencer avec un signe ca ne changera rien
demandes moi pour les points pas clairs
naga
-