要求:去掉字符串中指定的控制字符,例如:控制字符为$,
给定原字符串"abc$d$$",去控制字符后为“abcd"。
方案1:
从前往后遍历字符串,发现控制字符则移动控制字符后面的字符串到控制字符位置
缺点是:会存在重复拷贝
方案2:
”abc$d$$e"->"abcd$$$$e"->"abcde$$$"
发现一个控制字符则交换最近的非控制字符到当前位置,替换控制字符,如上所示。最后,所有的控制字符都将被移动到尾部,去掉尾部即可。
void SwapChar(char* pa,char* pb) { if(pa!=pb) { *pa = *pa + *pb; *pb = *pa - *pb; *pa = *pa - *pb; } } /* \param src:原始字符串 \param len:长度 */ void stringTrim(char* src,unsigned int len,char CTL_CHAR) { if( 0 == src || len == 0) { return; } char *p,*q; p = q = src; while( p < src+len && q < src+len ) { if( CTL_CHAR != *p ) { p++; } else { if( CTL_CHAR == *q || q <= p ) { q++; } else { SwapChar(p,q); } } } }