c语言要求实现一个删除字符串中的指定字符的简单函数

题目如下

img

用数组下标的解法能将就出结果,但是经不起刁钻测试用例考验

void delchar( char *str, char c ){
    int n=0;
    char *p=str;
    while(*p!='\0'){ //统计长度
        n++;
        p++;
    }
    for(int i=0;i<n;i++){ //从第一项起检查
        if(str[i]==c){    //如果指向元素等于c 执行for循环移位进行删除
            for(int j=i;j<n;j++){
                str[j]=str[j+1];
            }
        }
    }
}

运行结果如下

img

下面是用指针,算法没变只是用了指针 连运行都运行不了。。


```c
void delchar( char *str, char c ){
    int n=0;
    char *p=str;
    while(*p!='\0'){ //统计长度
        n++;
        p++;
    }
    while(*str!='0'){
        if(*str==c){
            char *p=str;
            for(;p!='\0';p++){
                *p=*(p+1);
            }
        }
        str++; 
    }
}

img

被删除字符之后的所有字符向前移动一个位置后,你忘了将最后一个字符设置为0,否则最后一个字符还是留在了字符串中

 for(int i=0;i<n;i++){ //从第一项起检查
        if(str[i]==c){    //如果指向元素等于c 执行for循环移位进行删除
            for(int j=i;j<n;j++){
                str[j]=str[j+1];
            }
            str[n-1] = 0;
            n--;
        }
}

希望能顺带说下为啥不能通过所有测试用例