思路
遍历字符串,发现相同的,就用下一个字符开始的子串向前一个覆盖,记录删除的字符个数k,然后记得在 len - k (最后的一个向后一个位置)的地方标记 '\0'
代码实现
int strRemoveSpecChar(char * str, const char c){
if(NULL == str){
printf("strRemoveSpecChar param error\n");
return PARAM_ERR;
}
int len = strlen(str);
int k = 0;
char * p = str;
char * t = str + len - 1;
while('\0' != *p){
if(c == *p){
memcpy(p, p + 1, (t - p));
k++;
/*p 被覆盖掉了,p的位置是新字符,不用p++*/
continue;
}
p++;
}
str[len - k] = '\0';
return SUCCESS;
}
void teststrRemoveSpecChar(void){
char str[100] = "cabcdefcgchci";
printf("\n************ teststrRemoveSpecChar ************ \n");
strRemoveSpecChar(str, 'c');
printf("after remove char 'c' is : %s\n", str);
return;
}
代码编译
gcc main.c str.c -g -o a.exe
调试输出
************ teststrRemoveSpecChar ************
after remove char 'c' is : abdefghi