程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks

本来想自己写一个,不过在网上一搜居然找到了一个代码用来处理字符的前后空格,估计还有不少人需要这个,在这里我把代码贴出来。

 1#include <string>
 2#include <vector>
 3#include <algorithm>   
 4#include <functional>   
 5   
 6using namespace std;
 7
 8
 9inline string&  lTrim(string   &ss)   
10{   
11    string::iterator   p=find_if(ss.begin(),ss.end(),not1(ptr_fun(isspace)));   
12    ss.erase(ss.begin(),p);   
13    return  ss;   
14}
   
15
16inline  string&  rTrim(string   &ss)   
17{   
18    string::reverse_iterator  p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(isspace)));   
19    ss.erase(p.base(),ss.end());   
20    return   ss;   
21}
   
22
23inline   string&   trim(string   &st)   
24{   
25    lTrim(rTrim(st));   
26    return   st;   
27}
   
28

当然除了这个算法还有很多,不过比较了一下还是这个比较清晰,呵呵!
posted on 2007-08-09 21:32 北风之神007 阅读(19569) 评论(6)  编辑 收藏 引用 所属分类: c/c++STL

评论

# re: C++ 实现trim()函数 2008-04-23 11:39 yezi
Good Job!  回复  更多评论
  

# re: C++ 实现trim()函数 2008-09-25 10:48 prairie
介个好办,这样:
string LTrim(const string& str)
{
return str.substr(str.find_first_not_of(" \n\r\t"));
}

string RTrim(const string& str)
{
return str.substr(0,str.find_last_not_of(" \n\r\t")+1);
}

string Trim(const string& str)
{
return LTrim(RTrim(str));
}  回复  更多评论
  

# re: C++ 实现trim()函数 2009-04-05 01:21 tt
@prairie
顯然這個更好些.  回复  更多评论
  

# re: C++ 实现trim()函数 2009-04-05 01:29 tt
下面這個更為簡潔:

string trim(const string str)
{
string tmp = str.substr(str.find_first_not_of(" "));
return tmp.substr(0,tmp.find_last_not_of(" ")+1);
}  回复  更多评论
  

# re: C++ 实现trim()函数 2009-04-07 17:49 wly1028
用find_first_not_of的兄弟没考虑到没找到的情况,如果全是空格,那返回值是string::npos,用string::npos作substr的参数会出错的。
  回复  更多评论
  

# re: C++ 实现trim()函数 2009-07-24 18:16 flagger
还是作者的容错机制更好一些  回复  更多评论
  


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