C语言经典例32-删除字符串中指定的字符

C语言经典例32-删除字符串中指定的字符

目录

1 题目2 分析3 实现4 运行结果

1 题目

删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母。

2 分析

本题是要处理字符串,在C语言中,我们把他转换为字符数组,则本质是要处理数组,在数组中删除某一元素的最简单方法是设定一个标记位point初始为0,它代表着当前保存的非删除字符的位置,而循环变量i则是要遍历整个字符数组,在循环时,若遇到删除字符,则i向前进(递增),而point由于当前不是有效字符,所以point不变,当遇到有效字符时,将该字符保存在point的位置,并且point向前进(递增),通过i和point以不同的规律递增,从而找到出有效的字符并逐一覆盖前面的要删除的字符。

下面以简单的图示来描述这个算法,假设要删除的字符为a:

起初i和point(为简单起见,下面都用p)都指向数组的第一个位置 在判断后发现i位置的字符就是a,则进行下一轮循环,i递增,p不动 在判断后发现i位置的字符不是a,则将i位置的b,赋值给p位置,然后i和p都递增,这样的话,原来要删除的a就被后面的字符“覆盖”掉了,循环结束后相当于字符串中的a都被删除了

注:该程序设计思想,在数组的题目中广泛使用,需要熟练掌握

3 实现

#include

#include

void deleteChar(char a, char str[]) {

int strLength = strlen(str); // 计算字符串的长度

int point = 0; // 字符串位置标号,用于保存当前有效字符位置

for (int i = 0; i < strLength; i++) {

if (str[i] == a) {

continue; // 若当前字符为要删除的字符,则直接跳过继续进行循环

} else {

str[point] = str[i]; // 当前字符为非删除字符,则往前覆盖

point++; // 有效字符标号位置递增

}

}

str[point] = '\0'; // 循环结束,最后一个字符为结束符

}

int main(void) {

char a; // 要删除的字母

char str[200]; // 保存字符串

scanf("%s", str);

deleteChar('a', str); // 这里把要删除的字符写死了,为`a`,你也可以换成输入语句,自行输入

puts(str);

return 0;

}

4 运行结果

abcaabbcc

bcbbcc

相关推荐

[求助]杀猪刀怎么出的 365手机版游戏中心官网

[求助]杀猪刀怎么出的

📅 08-08 👁️ 3636
解锁安卓西瓜影音:畅享海量影视资源,体验智能观影新境界 365手机版游戏中心官网

解锁安卓西瓜影音:畅享海量影视资源,体验智能观影新境界

📅 08-24 👁️ 4445
《空洞骑士》骨钉升级攻略 骨钉升级方法 365bet取款要多久到账

《空洞骑士》骨钉升级攻略 骨钉升级方法

📅 08-20 👁️ 6854
配音如何发出萝莉音 萝莉音的配音技巧 365手机版游戏中心官网

配音如何发出萝莉音 萝莉音的配音技巧

📅 07-12 👁️ 8798