0

文字列を検証しています。

string getString(string q)
{
    string input;

    do
    {
        cout << q.c_str() << endl;
        cin >> input;
    } while (!isalpha(input));

    return input;
}

入力を使用while(!isalpha(input)); すると、そのエラーが発生します。

誰でもこれで私を助けることができますか?

4

2 に答える 2

2

他の回答は問題が何であるかを説明していますが、独自のアルゴリズムを作成する代わりに、標準ライブラリのアルゴリズムを利用するソリューションを次に示します (例には C++11 が必要です)。

bool all_alpha( std::string const& s )
{
  return std::all_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isalpha) );
}

上記の関数は、文字列内のすべての文字がアルファベットの場合にのみ true を返します。数字のみを許可しない場合は、少し異なる関数を使用します。

bool any_digit( std::string const& s )
{
  return std::any_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isdigit) );
}

また

bool no_digits( std::string const& s )
{
  return std::none_of( s.cbegin(), s.cend(), static_cast<int(*)(int)>(std::isdigit) );
}

これらの関数を使用して、ユーザーから受け取った入力を検証します。


C++11 の機能を使用できない場合は、関数を変更してstd::find_if代わりに使用し、の戻り値を比較してfind_if成功s.end()/失敗を判断できます。

于 2012-10-18T16:22:58.523 に答える
1

isalpha関数は整数をパラメーターとして受け取りますが、それstd::string. 次のような関数を記述して、文字列にアルファベットのみが含まれているかどうかをテストできます。

bool   noDigitInString(std::string str)
{
  for (int i = 0; i < str.size(); i++)
  {
    if (isdigit(str[i]))
      return false;
   }
  return true;
}
于 2012-10-18T16:06:32.143 に答える