-1

文字列を引数として取る関数があります。私がやりたいのは、文字列が大文字で始まっているかどうかを確認することです。これが本当なら、私は本当を返したいです。大文字で始まらない場合は、falseを返します。簡単ですか?

私が使用していたコードは次のとおりです。

bool filter(string word)
    {
        char cWord[50];
        char c;
        for(int i = 0; i <= word.size(); i++)
        {
            cWord[i] = word[i];
        }
        c = cWord[0];
        if(isupper(c)){return true;}
        else{return false;}
    }

しかし、私はそれが私が望むように機能するとは思いません。私の関数が正しく機能することを誰かが確認できますか、または最初の文字が大文字であるかどうかを確認するためのより良い方法があるかどうかを確認できますか?

4

3 に答える 3

14

これは次のように単純である必要があります。

bool firstUpper(const string& word) { return word.size() && std::isupper(word[0]); }
于 2013-01-13T16:30:48.300 に答える
2

文字列が空でないことを確認した後std::isupper、ヘッダーから簡単に使用できます。<cctype>

bool filter(const std::string& word)
{
  return (!word.empty()) && std::isupper(word[0]);
}
于 2013-01-13T16:31:13.883 に答える
0

word引数が50文字より短い限り、関数は機能します。が長い場合は、スタックwordを上書きcWordして破損します。word他の人がすでに示しているように、最初の文字をテストするためにコピーする必要はありません。

于 2013-01-13T16:45:35.853 に答える