C语言经典例32-删除字符串中指定的字符
目录1 题目2 分析3 实现4 运行结果1 题目删除一个字符串中的指定字母,如:字符串 “aca”,删除其中的 a 字母。2 分析本题是要处理字符串,在C语言中,我们把他转换为字符数组,则本质是要处理数组,在数组中删除某一元素的最简单方法是设定一个标记位point初始为0,它代表着当前保存的非删除字符的位置,而循环变量i则是要遍历整个字符数组,在循环时,若遇到删除字符,则i向前进(递增),...
文章共1,251字 · 阅读需要大约5分钟
一键AI生成摘要,助你高效阅读
问答
·
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 <stdio.h>
#include <string.h>
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
更多推荐
已为社区贡献5条内容
所有评论(0)