C++中使用STL写的trim方法处理中文失败的问题以及解决方案-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

C++中使用STL写的trim方法处理中文失败的问题以及解决方案

简介:
碰到的问题
今天使用自己写的trim方法处理中文的时候在isspace这里断掉了,原因呢,是中文字符被转类型转来转去结果变成无限大数值,结果导致的断言发生,具体是怎么样的,看下面的参考资料吧。


解决办法
解决办法很简单,那就是自己重写isspace这个方法了,以下便是代码:
int my_isspace( int ch )
{
    return (unsigned int)(ch - 9) < 5u  ||  ch == ' ';
}

并附上trim方法的代码:
std::string& ltrim( std::string &ss )
{
    std::string::iterator it    = ss.begin();
    std::string::iterator end    = ss.end();

    while (it != end && my_isspace(*it)) ++it;
    ss.erase(ss.begin(), it);
    return ss;
}

std::string& rtrim( std::string &ss )
{
    int pos = int(ss.size()) - 1;

    while (pos >= 0 && my_isspace(ss[pos])) --pos;
    ss.resize(pos + 1);

    return ss;
}

std::string& trim( std::string &st )
{
    ltrim(rtrim(st));   
    return st;
}

现在处理中文就不会出问题了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章