C++ 实现Trim   
               添加时间:2013-7-20 点击量: 
 
              一、字符串去空格(没有处理惩罚字符串中心的空格)
lTrim:除去字符串开首的空格    eg.    abc123     --> abc123    
rTrim:除去字符串末尾的空格    eg.    abc123     -->     abc123
Trim:除去字符串开首和末尾的空格  eg.    abc123     --> abc123
品红色为空格
1.去除开首的空格
void lTrim(char  str)
{
    int i , len ;
    len = strlen( str ) ;
    for( i=0; i<len; i++)
    {
        if( str[i] !=  ) break ;
    }
    memmove(str,str+i,len-i+1);
    return ;
}
2.去除末尾的空格
void rTrim(char  str)
{
    int i,len ;
    len = strlen( str ) ;
    for(i = len-1;i>=0;i--)
    {
        if( (str[i] !=  )&&(str[i]!=0 x0a)&&(str[i]!=0 x0d) )  break ;
    }
    str[i+1] = 0 ;
    return ;
}
3.去除开首和末尾的空格
void Trim(char  str)
{
    int i , len ;
    //先去除左边的空格
    len = strlen( str ) ;
    for( i=0; i<len; i++)
    {
        if( str[i] !=  ) break ;
    }
    memmove(str,str+i,len-i+1);
    //再去除右边的空格
    len = strlen( str ) ;
    for(i = len-1; i>=0; i--)
    {
        if(str[i] !=  ) break ;
    }
    str[i+1] = 0 ;
    return ;
}
也可以如许
void Trim(char  str)
{
  lTrim(str);
  rTrim(str);
}
注:1.这里没有处理惩罚字符串中心的空格  eg.   abc   123    -->  abc   123
  2.这里只去除了“空格”和末尾的“回车”、“换行”符,其他的可以按照须要添加
      (ASCⅡ 32(0 x20))    一个空格
\t    (ASCⅡ 9(0 x09))     tab键
\n    (ASCⅡ 10 (0 x0A))   换行符
\r    (ASCⅡ 13 (0 x0D))   a carriage return.
\0    (ASCⅡ 0 (0 x00))    空字符
\x0B   (ASCⅡ 11 (0 x0B))   a vertical tab.
二、从pstr中删除所有rmchar字符
  包含字符串中心的字符: eg.空格(  )    abc   123    -->  abc123  eg.逗号(,) ,,,abc,,,123,,, -->  abc123
//从pstr中删除所有rmchar字符
void TrimEx(char pstr,char rmchr)
{
    char szOut[500];
    memset(szOut,0,sizeof(szOut));
    if (strlen(pstr)>sizeof(szOut))
        return;
    int index=0;
    for(int i=0;i<strlen(pstr);i++)
    {
        if( pstr[i] != rmchr)
        {
            szOut[index++]=pstr[i];
        }
    }
    strcpy(pstr,szOut);
}
三、附录:在网上找到的其他“去除开首和末尾空格”的办法,也拷贝下,按照须要选择
A.
inline string&  lTrim(string   &ss)   
{   
    string::iterator   p=find_if(ss.begin(),ss.end(),not1(ptr_fun(isspace)));   
    ss.erase(ss.begin(),p);   
    return  ss;   
}   
inline  string&  rTrim(string   &ss)   
{   
    string::reverse_iterator  p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(isspace)));   
    ss.erase(p.base(),ss.end());   
    return   ss;   
}   
inline   string&   trim(string   &st)   
{   
    lTrim(rTrim(st));   
    return   st;   
} 
B.
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)); 
}
 迎接转载,便利的话,请注明出处,感谢!
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
                     
                  
     
  
 
    
    
一、字符串去空格(没有处理惩罚字符串中心的空格)
lTrim:除去字符串开首的空格 eg. abc123 --> abc123
rTrim:除去字符串末尾的空格 eg. abc123 --> abc123
Trim:除去字符串开首和末尾的空格 eg. abc123 --> abc123
品红色为空格
1.去除开首的空格
void lTrim(char str)
{
int i , len ;
len = strlen( str ) ;
for( i=0; i<len; i++)
{
if( str[i] != ) break ;
}
memmove(str,str+i,len-i+1);
return ;
}
2.去除末尾的空格
void rTrim(char str)
{
int i,len ;
len = strlen( str ) ;
for(i = len-1;i>=0;i--)
{
if( (str[i] != )&&(str[i]!=0 x0a)&&(str[i]!=0 x0d) ) break ;
}
str[i+1] = 0 ;
return ;
}
3.去除开首和末尾的空格
void Trim(char str)
{
int i , len ;
//先去除左边的空格
len = strlen( str ) ;
for( i=0; i<len; i++)
{
if( str[i] != ) break ;
}
memmove(str,str+i,len-i+1);
//再去除右边的空格
len = strlen( str ) ;
for(i = len-1; i>=0; i--)
{
if(str[i] != ) break ;
}
str[i+1] = 0 ;
return ;
}
也可以如许
void Trim(char str)
{
  lTrim(str);
rTrim(str);
}
注:1.这里没有处理惩罚字符串中心的空格 eg. abc 123 --> abc 123
2.这里只去除了“空格”和末尾的“回车”、“换行”符,其他的可以按照须要添加
(ASCⅡ 32(0 x20)) 一个空格
\t (ASCⅡ 9(0 x09)) tab键
\n (ASCⅡ 10 (0 x0A)) 换行符
\r (ASCⅡ 13 (0 x0D)) a carriage return.
\0 (ASCⅡ 0 (0 x00)) 空字符
\x0B (ASCⅡ 11 (0 x0B)) a vertical tab.
二、从pstr中删除所有rmchar字符
包含字符串中心的字符: eg.空格( ) abc 123 --> abc123 eg.逗号(,) ,,,abc,,,123,,, --> abc123
//从pstr中删除所有rmchar字符
void TrimEx(char pstr,char rmchr)
{
char szOut[500];
memset(szOut,0,sizeof(szOut));
if (strlen(pstr)>sizeof(szOut))
return;
int index=0;
for(int i=0;i<strlen(pstr);i++)
{
if( pstr[i] != rmchr)
{
szOut[index++]=pstr[i];
}
}
strcpy(pstr,szOut);
}
三、附录:在网上找到的其他“去除开首和末尾空格”的办法,也拷贝下,按照须要选择
A.
inline string& lTrim(string &ss)
{
string::iterator p=find_if(ss.begin(),ss.end(),not1(ptr_fun(isspace)));
ss.erase(ss.begin(),p);
return ss;
}
inline string& rTrim(string &ss)
{
string::reverse_iterator p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(isspace)));
ss.erase(p.base(),ss.end());
return ss;
}
inline string& trim(string &st)
{
lTrim(rTrim(st));
return st;
}
B.
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));
}
迎接转载,便利的话,请注明出处,感谢!




