以为在C++中对字符串进行大小写转换会有现成函数,找来找去,发现还是自己实现更快:
inline int str2lower(std::string& str)
{
for (auto &i : str) {
if (i >= 'A' && i <= 'Z') {
i += 'a' - 'A';
}
}
return 0;
}
inline int str2upper(std::string& str)
{
for (auto &i : str) {
if (i >= 'a' && i <= 'z') {
i -= 'a' - 'A';
}
}
return 0;
}
后来发现stackoverflow上有人提问,也有人解答了这个问题:
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
也就是对字符串str依次执行C语言里的tolower函数,再或者使用lambda表达式:
//toupper
std::transform(str.begin(), str.end(), str.begin(), [=](char c)->char{return (c >= 'a' && c <= 'z') ? c + 'A' - 'a' : c;});//toupper
个人偏向于自己实现,简单且可以控制是否内联。