2013-01-13 54 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来测试第一个字符。

相关问题