用c语言实现我们经常在编辑各种文档时发现拼写错误,需要将错误的字符串替换为正确的字符串。 连续输入三个字符串,在第一个字符串中查找第二个字符串,如果存在,就将之替换为第三个字符串。 输出被更正后的第一个字符串。 (ABC的长度均不超过1000). 例如输入: ABCDEFG DE KKK 输出: ABCKKKFG 输入: ABCDEFG DE (空字符串) 输出:ABCFG (提示,请考虑一些特殊情况,例如 AAAAA AA ADA 你应该输出:ADADADADA,而不是ADAADAA。 如果输入的第三个字符串为空,那么相当于在第一个字符串中删除掉第二个字符串。 例如: 输入: ABCDEFG DE (空字符串) 那么你应该输出:ABCFG)
时间: 2023-06-18 14:04:42 浏览: 97
以下是用 C 语言实现的代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char str1[1001], str2[1001], str3[1001];
scanf("%s %s %s", str1, str2, str3);
int len1 = strlen(str1), len2 = strlen(str2), len3 = strlen(str3);
int i, j, k, flag;
for (i = 0; i < len1; ) {
flag = 1;
for (j = 0; j < len2; j++) {
if (str1[i+j] != str2[j]) {
flag = 0;
break;
}
}
if (flag) {
if (len2 > len3) {
for (k = i; k < len1-len2+len3; k++) {
str1[k+len2-len3] = str1[k+len2];
}
str1[k+len2-len3] = '\0';
len1 = strlen(str1);
} else if (len2 < len3) {
for (k = len1; k >= i+len2; k--) {
str1[k+len3-len2] = str1[k];
}
str1[k+len3-len2] = '\0';
len1 = strlen(str1);
}
for (k = 0; k < len3; k++) {
str1[i+k] = str3[k];
}
len1 = strlen(str1);
i += len3;
} else {
i++;
}
}
printf("%s\n", str1);
return 0;
}
```
代码思路如下:
1. 首先读入三个字符串,分别存储在 `str1`、`str2`、`str3` 中。
2. 使用 `strlen` 函数获取每个字符串的长度。
3. 使用双重循环,在 `str1` 中查找 `str2`,如果找到了,就执行替换操作。
4. 如果要将 `str2` 替换为 `str3`,且 `str2` 的长度大于 `str3` 的长度,那么需要将 `str1` 中从 `i+len2` 开始的所有字符向前移动 `len2-len3` 个位置,以便腾出足够的空间插入 `str3`。如果 `str2` 的长度小于 `str3` 的长度,那么需要将 `str1` 中从 `len1` 开始逆序遍历到 `i+len2` 的所有字符向后移动 `len3-len2` 个位置,以便腾出足够的空间插入 `str3`。
5. 执行替换操作后,将 `i` 更新为 `i+len3`,因为 `str2` 已经被替换为 `str3`。
6. 最后输出更正后的 `str1`。
阅读全文