牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

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

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



参考资料
vc 2005 sp1下isspace函数对中文处理有问题 http://www.cppblog.com/luonjtu/archive/2009/03/12/76332.html
isspace ( )【C语言库函数源代码】 http://blog.chinaunix.net/u/25381/showart_212374.html


posted on 2009-03-21 12:37 杨粼波 阅读(1010) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理