Additions soustraction dans une chaine de caracteres

Fermé
ld09 Messages postés 9 Date d'inscription dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017 - 31 janv. 2017 à 11:36
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 31 janv. 2017 à 14:03
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 samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 252
31 janv. 2017 à 13:39
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 dimanche 22 mai 2016 Statut Membre Dernière intervention 31 janvier 2017
31 janv. 2017 à 13:50
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 samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 252
31 janv. 2017 à 14:03
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