我正在寻找一种比以下代码更优雅的方法来从字符串中查找第一个大写字母的位置:
size_t getFirstUppercasePosition(const string &str)
{
for(size_t i = 0; i < str.size(); ++i)
{
if (isupper(str[i]))
return i;
}
return string::npos;
}
是否可以使用find
或find_if
做同样的事情?
已添加:
我正在尝试将第一个大写字母转换为小写字母,然后从字符串中删除前一部分。
例如,howAreYouToday
-> areYouToday
ADDED2:
const auto it = std::find_if(str.begin(), str.end(), [](auto c)
{return std::isupper(c);});
*it = tolower(*it);
str = str.substr(std::distance(str.begin(), it));
这是最好的方法吗?
答案 0 :(得分:2)
如果可以访问C ++ 11及更高版本,则可以在find_if
中使用lambda:
auto itr = std::find_if(str.begin(), std.end(), [] (char chr) { return std::isupper(chr); });
if(itr != str.end())
// use itr..
如果您确实需要索引,则可以使用std::distance
。