2013-10-07 150 views
-3

说我正在接受一个字符串,并且想检查它是否在字符串中有一个大写字母。我从文件输入字符串。我将如何去分解它来检查使用ascii值是否有大写值?谢谢!C++检查字符串

+0

'的std :: find_if':http://en.cppreference.com/w/cpp/algorithm/find – us2012

+0

请添加你已经尝试什么,以及一段代码给你带来麻烦。 http://stackoverflow.com/help/how-to-ask –

+0

我还没有尝试过任何东西,因为除了可能将其作为字符数组使用以外,我无法想到任何其他内容,但这是很大的开销。 – user2311799

回答

0

您可以使用C++算法库找到,如果一个字符串包含在它的大写值通过使用谓词(使用std的包装版本:: isupper):

#include <algorithm> 
#include <iostream> 
#include <string> 
#include <cctype> 

bool IsUpper (char c) { 
    return std::isupper(c); 
} 

bool hasUpperCase (std::string str) { 
    std::string::iterator it = std::find_if(str.begin(), str.end(), IsUpper); 
    if (it != str.end()) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

int main() { 
    std::string s = "This contains an uppercase character in it..."; 
    if (hasUpperCase(s)) { 
     std::cout << "String s contains a least one uppercase character." << std::endl; 
    } 
    else { 
     std::cout << "String s does not contain any uppercase character." << std::endl; 
    } 
} 

here谓语是:

是一个C++函数,返回布尔型或具有bool operator()成员的对象实例。一元谓词取一个agrument,二 - 二, 等问题谓词的例子可以回答特定 算法有:

  • 是这个元素就是我们正在寻找的?
  • 两个参数中的第一个是按照我们的顺序排在第一位的吗?
  • 两个参数是否相等?

几乎所有的STL算法都以谓词作为最后一个参数。

因此,简言之,这部作品由每个角色对谓词函数的字符串:IsUpper本身使用std::isupper做检查,看看是否有问题的字符是大写或没有。如果是,则返回true,并将该字符存储在迭代器中。

参考:

http://en.cppreference.com/w/cpp/algorithm/find https://stackoverflow.com/a/5921826/866930

+0

您需要真正检查查找是否成功。 –

+0

我无法从这段代码中获得太多。 – user2311799

+0

@BenjaminLindley:编辑。 – jrd1