2017-02-26 14 views
2

文字列のすべての桁をC++で追加しようとしていますが、すべてのテストケースを渡すことはできません。私のコードは以下の通りです。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; 
} 

この問題を解決する方法がわからない場合は、誰かが私を助けますか?

+0

を試すことができますか? –

+0

追加する前に、文字str [i]が数字であることを確認してください。文字列に数字とアルファベットの両方の文字が含まれていると、問題になる可能性があります。 if(isdigit(str [i])){count + =(str [i] - '0');} –

答えて

0

表示されたコードは、数字だけを含む文字列(「123」など)に対して正しく機能します。

処理する必要があるケースが2つあります。非数字と非ASCII数字です(これは初心者割り当ての可能性が低い)。非数字を処理するため

一つの方法は、あなたのプログラムが「¼」などのすべてのUnicode numeralsをサポートしなければならない場合は、2番目のケースでは

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

(また、「三項演算子」として知られている)条件演算子を使用してゼロにそれらを変換することです完全なUnicodeテーブルをサポートするライブラリを見つけるか、特別なケースを自分で書く必要があります。すべての数字が整数を表すわけではないので、結果はfloatである必要があります。

0

あなたはそれが仕事をdoesntのための任意のサンプル入力を与えることができ、この

#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; 
} 
関連する問題