C++ 实现Trim

来源:互联网 发布:澳洲留学中介 知乎 编辑:程序博客网 时间:2024/05/29 12:47

一、字符串去空格(没有处理字符串中间的空格)

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]!=0x0a)&&(str[i]!=0x0d) )  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(0x20))    一个空格"\t"    (ASCⅡ 9(0x09))     tab键"\n"    (ASCⅡ 10 (0x0A))   换行符"\r"    (ASCⅡ 13 (0x0D))   a carriage return."\0"    (ASCⅡ 0 (0x00))    空字符"\x0B"   (ASCⅡ 11 (0x0B))   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)); }
复制代码

 

 欢迎转载,方便的话,请注明出处,谢谢!

 

原创粉丝点击