碰到的問題:
今天使用自己寫的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.shnenglu.com/luonjtu/archive/2009/03/12/76332.htmlisspace ( )【C語言庫函數源代碼】
http://blog.chinaunix.net/u/25381/showart_212374.html