c语言题目4:字符串处理 1)从键盘输入一个英文句子并保存在字符数组中;2)能删除多余的空格:单词之间只留一个空格,句子前后无空格; 3)能统计某单词出现的频度: 4)能替换某个单词。
时间: 2024-02-01 09:13:03 浏览: 98
以下是题目4的C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
// 删除多余空格
void remove_extra_space(char *s) {
int i, j;
for (i = 0, j = 0; s[i] != '\0'; i++) {
if (s[i] != ' ' || (i > 0 && s[i-1] != ' ')) {
s[j++] = s[i];
}
}
if (j > 0 && s[j-1] == ' ') {
s[j-1] = '\0';
} else {
s[j] = '\0';
}
}
// 统计单词出现频度
int count_word_occurrence(char *s, char *word) {
int count = 0;
char *pos = strstr(s, word);
while (pos != NULL) {
count++;
pos = strstr(pos + strlen(word), word);
}
return count;
}
// 替换单词
void replace_word(char *s, char *old_word, char *new_word) {
char *pos = strstr(s, old_word);
int old_len = strlen(old_word);
int new_len = strlen(new_word);
while (pos != NULL) {
memmove(pos + new_len, pos + old_len, strlen(pos + old_len) + 1);
memcpy(pos, new_word, new_len);
pos = strstr(pos + new_len, old_word);
}
}
int main() {
char sentence[1000];
printf("请输入英文句子:\n");
fgets(sentence, 1000, stdin);
// 删除多余空格
remove_extra_space(sentence);
printf("删除多余空格后的句子:\n%s\n", sentence);
// 统计单词出现频度
char word[100];
printf("请输入要统计的单词:\n");
scanf("%s", word);
int count = count_word_occurrence(sentence, word);
printf("单词 \"%s\" 出现的次数为:%d\n", word, count);
// 替换单词
char old_word[100], new_word[100];
printf("请输入要替换的单词:\n");
scanf("%s", old_word);
printf("请输入新单词:\n");
scanf("%s", new_word);
replace_word(sentence, old_word, new_word);
printf("替换后的句子:\n%s\n", sentence);
return 0;
}
```
实现思路:
1. 从键盘输入英文句子并保存到字符数组中,使用 fgets() 函数可以获取完整的一行输入,避免出现缓冲区溢出的问题。
2. 删除多余空格,使用两个指针 i 和 j,当遇到连续多个空格时,只保留一个空格。最后要注意去掉字符串末尾的空格。
3. 统计某单词出现的频度,使用 strstr() 函数查找字符串中是否存在该单词,如果存在则将指针 pos 移动到下一个单词位置继续查找,直到找不到为止。
4. 替换某个单词,使用 strstr() 函数查找要替换的单词位置,然后使用 memmove() 函数将后面的字符串向后移动,再使用 memcpy() 函数将新单词复制到该位置。同样需要循环查找所有出现的位置。
阅读全文