C++中对字符串进行大小写转换

以为在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

个人偏向于自己实现,简单且可以控制是否内联。

发表于 2015年08月19日 17:30   评论:0   阅读:2807  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo