gpt4 book ai didi

c++ - 检查std::string是否包含小写字符?

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:46 27 4
gpt4 key购买 nike

#include <boost/spirit/home/support/char_encoding/ascii.hpp>

bool IsStringAllNonLowercaseA(const std::string& str)
{
std::string newStr(str);

boost::to_upper(newStr);

if (newStr == str)
return true;
else
return false;
}

bool IsStringAllNonLowercaseB(const std::string& str)
{
for (std::string::const_iterator iter=str.begin(); iter != str.end(); ++iter)
{
if (boost::spirit::char_encoding::ascii::islower(*iter))
return false;
}
return true;
}

问题> 我正在寻找一种有效的方法来检查 std::string 是否包含所有大写字母。如果有来自 C++ 标准或 boost 库的标准函数,那将是最好的。

我自己实现了两个版本。但我不确定它们是否足够好。欢迎提出任何建议和意见。

最佳答案

我的第一 react 可能是这样的:

return std::find_if(str.begin(), str.end(), ::islower) == str.end();

如果您有可用的 C++ 11,您还可以使用:

return !std::any_of(str.begin(), str.end(), ::islower);

编辑:正如 James Kanze 指出的那样,如果输入错误(其中“错误”意味着基本执行字符集中所需的基本 ASCII 字符之外的几乎任何内容),其中一个/两个可能/将具有未定义的行为。要更正它,需要在将值传递给::isupper 之前将其转换为 unsigned char。

struct IsUpper {
bool operator()(int value) {
return ::isupper((unsigned char)value);
}
};

return std::find_if(str.begin(), str.end(), IsUpper()) == str.end();

或:

return !std::any_of(str.begin(), str.end(), IsUpper());

或者,您可以使用 lambda:

return std::find_if(str.begin(), str.end(), 
[](int ch) { return ::isupper(unsigned char)ch);}) == str.end();

或:

return !std:any_of(str.begin(), str.end(), 
[](char ch) { return ::isupper(unsigned char)ch)); });

关于c++ - 检查std::string是否包含小写字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com