2013-01-13 134 views
-1

我有一個函數,它將一個字符串作爲參數。 我想要做的是檢查字符串是否以大寫字母開頭。如果這是真的,那麼我想返回true。如果它不是以大寫字母開頭,那麼我希望返回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;} 
    } 

不過,我不認爲它的功能如何我想它。任何人都可以確認我的函數應該正常工作,還是有更好的方法來檢查第一個字符是否是大寫字母?

+0

我沒有看到任何問題。請注意,isupper會考慮系統區域設置來決定它收到的字符是否是大寫字母。 – Spidey

+1

你爲什麼複製字符串?我假設'string'是'std :: string','isupper'是'std :: isupper'? –

+1

另外,你容易受到緩衝區溢出......如果單詞是50個字符或更多,會發生什麼? –

回答

13

這應該是如此簡單:

bool firstUpper(const string& word) { return word.size() && std::isupper(word[0]); } 
+1

這個,還想想你想要什麼空串。 – zch

+0

@zch謝謝,更正了代碼。 – piokuc

+3

我認爲'!word.empty()'或'word.size()> 0'不會比'word.size()'混淆。你應該也可以使用'std :: isupper'。 – ronag

2

您可以簡單地使用std::isupper從標題<cctype>,檢查該字符串是不是空了。

bool filter(const std::string& word) 
{ 
    return (!word.empty()) && std::isupper(word[0]); 
} 
+1

他正在使用它... – ronag

+0

@ronag有趣...我想知道OP的問題是什麼。 – juanchopanza

+1

@ juanchopanza:那這就是問題不是它!沒有人回答,主要是因爲我們不知道問題是什麼。 –

0

只要您的參數word少於50個字符,您的函數就會工作。如果word更長,則會覆蓋cWord並損壞堆棧。正如其他人已經表明的那樣,沒有必要複製word來測試第一個字符。

相關問題