Additions soustraction dans une chaine de caracteres

ld09 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
nagaD.scar Messages postés 4272 Date d'inscription   Statut Membre Dernière intervention   -
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.

#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;
}
A voir également:

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription   Statut Membre Dernière intervention   252
 
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
0
ld09 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
oui je pensais que c'etait a ce niveau la mais je n'arrive pas du tout a resoudre ce probleme, merci en tout cas!
0
nagaD.scar Messages postés 4272 Date d'inscription   Statut Membre Dernière intervention   252
 
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
0