删除指定字符串(C语言)

一、题目描述

本题要求实现一个删除字符串中的指定字符的简单函数。 函数接口定义: void delchar( char *str, char c ); 其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。

二、裁判测试程序样例

#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
          
   
    char str[MAXN], c;

    scanf("%c
", &c);
    ReadString(str);
    delchar(str, c);
    printf("%s
", str);

    return 0;
}

/* 你的代码将被嵌在这里 */

三、输入输出

输入样例

a
happy new year

输出样例

hppy new yer

四、解题思路

也许多人在看到这个题的时候,会在想这样一种思路:”查询整个字符串,当匹配到和目标字符相同的时候,将后面的所有字符往前移动,并删除掉其字符,之后继续往下查询,重复以上的操作,,,“,也许你觉得这样的做法很直接,或者木有问题,但是计算机在运行时,就出现问题了,不说太多,希望有缘人能自己去实现一下,看看这种思路到底有何弊端?实践才能出真理。
今天我们来看看另外一种思路:当我们在玩老鹰捉小鸡的时候,小鸡排在母鸡后面,但是有一只或者多只小鸡被老鹰抓住了,必须从队伍中脱离开来,那么后面部分小鸡如何找到前面没有被抓走的呢?是不是需要找到最后一个没有被抓走的?当去连接前面没有被抓走的小鸡的时候,后面部分的第一个小鸡又被抓走了?那么下一个又是如何去连接前面呢? 同样的道理,定位当前没有和目标字符相匹配的字符位置,当后面字符出现与目标字符不相匹配的字符时,只将其移动到前一个字符后面即可,后面未查询的字符不跟着往前移动。如此直到最后整个字符串匹配完。

五、示例代码

void delchar( char *str, char c ){
          
   
    int curr_index = 0;
    for(int i=0;str[i]!=;++i){
          
   
        if(str[i]!=c){
          
   
            str[curr_index++] = str[i];
        }
    }
    str[curr_index]=;
}

六、运行结果

经验分享 程序员 微信小程序 职场和发展