碰到的问题
:
今天使用自己写的trim方法处理中文的时候在isspace这里断掉了,原因呢,是中文字符被转类型转来转去结果变成无限大数值,结果导致的断言发生,具体是怎么样的,看下面的参考资料吧。
解决办法
解决办法很简单,那就是自己重写isspace这个方法了,以下便是代码:
并附上trim方法的代码:
现在处理中文就不会出问题了。
今天使用自己写的trim方法处理中文的时候在isspace这里断掉了,原因呢,是中文字符被转类型转来转去结果变成无限大数值,结果导致的断言发生,具体是怎么样的,看下面的参考资料吧。
解决办法
解决办法很简单,那就是自己重写isspace这个方法了,以下便是代码:
int my_isspace(
int ch )
{
return (unsigned int)(ch - 9) < 5u || 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;
}
{
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;
}
现在处理中文就不会出问题了。