2016-04-19 5 views
-1

私はC++でプログラムを作成しようとしましたが、これは文字列変数の数値だけを読み込むべきです。しかし、それは動作していないようです。なぜ誰かが私に言うことができますか?C++のプログラムでは、文字列変数の数値のみが読み込まれます。しかし動作していません

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    string str = "11111111111"; 

    for(unsigned i = 0; i<=str.length(); i++) { 
     if(str.at(i)!='0' || str.at(i)!='1' ||str.at(i)!='2' ||str.at(i)!='3' || 
      str.at(i)!='4' || str.at(i)!='5' ||str.at(i)!='6' ||str.at(i)!='7' || 
      str.at(i)!='8' || str.at(i)!='9' || 
      str.at(i)!='-') { 
      cout << "Invalid Phone Number!" << endl; 
      cout << str.at(i); 
     break; 
     } 
    } 
    cout << str; 

} 
+3

正確に何が間違っているのですか?私はそれがうまくコンパイルし、少なくともいくつかの出力を与えると思う – deeiip

+0

コンパイラエラーはありません、文字列が数値であっても、常に最初の値を読み取った後、forループを壊します。 –

+0

https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

答えて

1
for(unsigned i = 0; i<=str.length(); i++) 

変更はi < str.length()との比較、およびロジックを修正:

for (unsigned i = 0; i < str.length(); i++) 
{ 
    if (str[i] < '0' || str[i] > '9') 
    { 
     if (str[i] != '-') 
     { 
      cout << str[i] << "\n"; 
      cout << "Invalid Phone Number!" << endl; 
      break; 
     } 
    } 
} 
+0

ありがとう、それは完全に動作します。 –

+0

ようこそ。あなたの質問に回答があった場合は大きなチェックマークをクリックして答えを受け入れ、この問題を閉じますhttp://meta.stackexchange.com/a/5235 –

2

あなたは正規表現を使用することができます

#include <regex> 

std::string str = "11111111111"; 

if (false == std::regex_match(str, std::regex("[-0-9]+"))) 
{ 
    std::cout << "Invalid Phone Number!\n"; 
} 
関連する問題