std::string的工具函数 - 用isspace实现trim函数

来源:互联网 发布:java qq登录接口 编辑:程序博客网 时间:2024/05/14 04:45

在CodeProject上有朋友说我不应该将空白字符限制在" /t/n/r" 以内,应该使用isspace来实现trim函数,以处理Unicode的空白字符。此话在理,所以将trim的三个函数改了一下。(参阅上一篇《std::string的工具函数》)

string trimLeft(const string& str) {
    
string t = str;
    
for (string::iterator i = t.begin(); i != t.end(); i++) {
        
if (!isspace(*i)) {
            t.erase(t.begin(), i);
            
break;
        }
    }
    
return t;
}

string trimRight(const string& str) {
    
if (str.begin() == str.end()) {
        
return str;
    }

    
string t = str;
    
for (string::iterator i = t.end() - 1; i != t.begin(); i--) {
        
if (!isspace(*i)) {
            t.erase(i 
+ 1, t.end());
            
break;
        }
    }
    
return t;
}

string trim(const string& str) {
    
string t = str;

    
string::iterator i;
    
for (i = t.begin(); i != t.end(); i++) {
        
if (!isspace(*i)) {
            t.erase(t.begin(), i);
            
break;
        }
    }

    
if (i == t.end()) {
        
return t;
    }

    
for (i = t.end() - 1; i != t.begin(); i--) {
        
if (!isspace(*i)) {
            t.erase(i 
+ 1, t.end());
            
break;
        }
    }

    
return t;
}

  原理很浅显,就是把原来用find_first_of和find_first_not_of实现的查找换成循环,自己用isspace来判断。本来想参考一下boost的实现,不过发现它的代码实在有点复杂,所以还是自己用简单的循环来解决了。


原创粉丝点击