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