2017-02-26 5 views
2

J'essaie d'ajouter tous les chiffres d'une chaîne en C++, mais elle ne peut pas passer tous les cas de test. Mon code est donné ci-dessous.Ajouter tous les chiffres d'une chaîne en C++

#include <iostream> 
using namespace std; 

int main() 
{ 
    string str; 
    long long int count=0; 
    cin>>str; 
    for(int i=0;i<str.length();i++) 
    { 
     count+=(str[i]-'0'); 
    } 
    cout<<count<<endl; 
    return 0; 
} 

Je ne sais pas comment résoudre ce problème quelqu'un peut-il m'aider ???

+0

peut vous donner une entrée d'échantillon pour lequel il ne fonctionne pas? –

+0

Vérifiez si le caractère str [i] est un chiffre avant de l'ajouter. Cela peut poser un problème si la chaîne comporte à la fois des chiffres et des caractères alphabétiques. if (isdigit (str [i])) {count + = (str [i] - '0');} –

Répondre

0

Le code indiqué fonctionne correctement pour les chaînes contenant uniquement des chiffres (comme "123").

Deux autres cas peuvent devoir être traités: les caractères non numériques et les caractères non ASCII (cela est moins probable pour l'assignation des débutants).

Une façon de gérer non chiffres est de les convertir à zéro en utilisant l'opérateur conditionnel (également connu sous le nom « opérateur ternaire »)

count += isdigit(str[i]) ? (str[i]-'0') : 0; 

Pour second cas, si votre programme doit prendre en charge tous les Unicode numerals comme « ¼ » vous devrez soit trouver une bibliothèque qui prend en charge les tables Unicode complètes, soit écrire des cas spéciaux vous-même. Notez que le résultat doit être float car tous les nombres ne représentent pas des nombres entiers.

0

Vous pouvez essayer

#include <iostream> 
using namespace std; 

int main() 
{ 
    string str; 
    long long int count=0; 
    cin>>str; 
    //ASCII value of digits 0-9 lie between 48 to 57 
    for(int i=0;i<str.length();i++) 
    { 
     if(str[i]>=48 && str[i]<=57) 
      count = count + (int)str[i] - 48; 
    } 
    cout<<count<<endl; 
    return 0; 
}