TuringQi 2021-09-19 20:44 采纳率: 88.2%
浏览 165
已结题

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

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2021-09-19 20:50
    关注

    被删除字符之后的所有字符向前移动一个位置后,你忘了将最后一个字符设置为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--;
            }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题