碰到的问题:
今天使用自己写的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;
}
现在处理中文就不会出问题了。
参考资料:
vc 2005 sp1下isspace函数对中文处理有问题
http://www.cppblog.com/luonjtu/archive/2009/03/12/76332.htmlisspace ( )【C语言库函数源代码】
http://blog.chinaunix.net/u/25381/showart_212374.html