C++ 实现Trim

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

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)); 
}

 

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

 


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值