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;
}

现在处理中文就不会出问题了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值