2017-04-08 25 views
0

私の目標は、小文字と大文字と空白だけを保持することをC++の入力を検証することです。 forループなしでこれを行うことはできますか?私の現在のコードは次のとおりです。C++のみの文字と空白の入力の入力

bool validateInput() 
      char c; 
      string result; 
      cin >> result; 

      for (int i = 0; i < result.length(); i++) { 
       c = result.at(i); 
       if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == ' ')) 
       { 
        return false; 
       } 
      } 
    } 
+0

:-)書くことが容易であるので、「私はせずにそれを行うことができますと、順番に小数点以下の値にマッピングされたアルファベットの文字を持っていない可能性があり、部分的にので、おそらくもstd::isalphaを使用することをお勧めしますforループ? std :: string :: find_first_ofを調べます。 –

+0

問題は、文字列内のすべての文字をチェックするために何らかのループが必要であることです。 'std :: string :: find'のような関数でループやループを使う場合でも、ループが必要です。 –

+0

'std :: isalpha'について読んでください。 CまたはC++には、そのテストが機能することを保証するものは何もありません。 –

答えて

1

あなたはforループをせずにそれを行うことができ、あなたは明らかにまだループを使用する必要がありますが、私はあなたにも使用することができます(、現代のC++の方法はstd::find_ifを用いることであろうと思います@ NathanOliverによって指摘されたstd::none_ofは、std::find_ifをラップし、イテレータの代わりにブール値を返します)。これは、文字セットの一部が、

bool validateInput() 
{ 
    std::string result; 
    std::cin >> result; 
    return std::none_of(result.begin(), result.end(), [](const char& c) 
    { 
     return !(std::isalpha(c) || c == ' '); 
    }); 
} 
+1

['std :: any_of'](http://en.cppreference.com/w/cpp/algorithm/all_any_none_of)は、この場合にはより適切かもしれないようにboolを返します。 – NathanOliver

+0

答えがありがとう、私の質問は私はループなしでそれを行うことができました。片方の質問をお願いします。その条件に数値を加えることはできますか? isnumberメソッドはありますか? – TeodorKolev

+0

@TeodorKolev "isnumberメソッドはありますか?" 、ええ、私は['std :: isdigit'](http://en.cppreference.com/w/cpp/string/byte/isdigit)がここで最も適切だと思います。 – George

関連する問題