输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。C语言
时间: 2023-05-29 21:05:39 浏览: 756
实现如下:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[101]; // 存放输入的字符串
char old_word[21]; // 存放需要替换的单词
char new_word[21]; // 存放替换成的单词
char *p; // 用于定位需要替换的单词
int len_old, len_new; // 存放需要替换的单词和替换成的单词的长度
// 输入字符串、需要替换的单词和替换成的单词
fgets(str, 101, stdin);
scanf("%s%s", old_word, new_word);
len_old = strlen(old_word);
len_new = strlen(new_word);
// 定位需要替换的单词并替换
p = strstr(str, old_word); // 定位第一次出现需要替换的单词的位置
while (p != NULL) {
// 将需要替换的单词替换成新的单词
memcpy(p, new_word, len_new);
// 如果替换后的字符串长度发生变化,需要将后面的字符向前移动或向后补齐
if (len_new != len_old) {
if (len_new < len_old) { // 替换后的字符串长度比替换前的短,需要将后面的字符向前移动
memmove(p + len_new, p + len_old, strlen(p + len_old) + 1);
}
else { // 替换后的字符串长度比替换前的长,需要将后面的字符向后补齐
memmove(p + len_new, p + len_old, strlen(p + len_old) + 1);
memset(p + len_old, ' ', len_new - len_old);
}
}
// 继续查找是否还有需要替换的单词
p = strstr(p + len_new, old_word);
}
// 输出替换后的字符串
printf("%s", str);
return 0;
}
```
代码说明:
1. 首先定义了三个字符数组 `str`、`old_word` 和 `new_word`,分别用于存放输入的字符串、需要替换的单词和替换成的单词。其中,`str` 的长度为 101,是因为还需要额外存储一个回车符。
2. 使用 `fgets` 函数从标准输入中读取字符串,因为字符串中可能含有空格,不能使用 `scanf` 函数。
3. 使用 `scanf` 函数从标准输入中读取需要替换的单词和替换成的单词,这里假设单词长度最长为 20。
4. 使用 `strlen` 函数计算需要替换的单词和替换成的单词的长度。
5. 使用 `strstr` 函数定位第一次出现需要替换的单词的位置,并将其替换成替换成的单词。如果替换后的字符串长度发生变化,需要将后面的字符向前移动或向后补齐。
6. 继续查找是否还有需要替换的单词,直到字符串中不再包含需要替换的单词。
7. 最后输出替换后的字符串。
测试样例:
输入:
```
hello world, hello C world!
hello world
C++
```
输出:
```
hello C++ world, hello C++ world!
```