-3

假设我正在输入一个字符串并想检查它是否在字符串中包含大写字母。我从文件中输入字符串。我将如何分解它以使用 ascii 值检查它是否具有大写值?谢谢!

4

1 回答 1

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; 
    }
}

这里一个谓词是:

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

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

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

因此,总而言之,这通过字符串中的每个字符对谓词函数起作用:IsUpper它本身用于std::isupper检查所讨论的字符是否为大写。如果是,则返回 true,并且该字符存储在迭代器中。

参考:

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

于 2013-10-07T00:39:46.633 回答