1)从键盘输入一个英文句子并保存在字符数组中: 2)能删除多余的空格:单词之间只留一个空格,句子前后无空格; 3)能统计某单词出现的频度: 4)能替换某个单词
时间: 2024-03-10 15:49:15 浏览: 61
Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法
以下是C语言的代码实现,可以实现上述要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 定义字符数组最大长度
int main() {
char sentence[MAX_LEN]; // 定义字符数组
printf("请输入一个英文句子:\n");
fgets(sentence, MAX_LEN, stdin); // 从键盘输入句子,并保存在字符数组中,注意使用fgets函数可以避免输入过长导致的缓冲区溢出问题
// 删除多余的空格
int len = strlen(sentence); // 获取句子的长度
int i, j;
for (i = 0, j = -1; i < len; i++) { // 去掉句子前面的空格
if (sentence[i] != ' ') {
j = i;
break;
}
}
if (j != -1) {
for (i = j; i < len; i++) {
sentence[i-j] = sentence[i];
}
len -= j;
}
for (i = len-1, j = -1; i >= 0; i--) { // 去掉句子后面的空格
if (sentence[i] != ' ') {
j = i;
break;
}
}
if (j != -1) {
sentence[j+1] = '\0';
len = j + 1;
}
for (i = 0, j = 0; i < len; i++) { // 去掉单词之间多余的空格
if (!(sentence[i] == ' ' && sentence[i+1] == ' ')) {
sentence[j++] = sentence[i];
}
}
sentence[j] = '\0';
len = strlen(sentence);
// 统计某单词出现的频度
char word[MAX_LEN];
printf("请输入要统计频度的单词:\n");
scanf("%s", word);
int word_len = strlen(word);
int freq = 0;
for (i = 0; i <= len-word_len; i++) {
if (strncmp(sentence+i, word, word_len) == 0) {
freq++;
}
}
printf("单词 %s 出现的频度为 %d 次。\n", word, freq);
// 替换某个单词
char old_word[MAX_LEN], new_word[MAX_LEN];
printf("请输入要替换的单词:\n");
scanf("%s", old_word);
printf("请输入替换后的单词:\n");
scanf("%s", new_word);
char *p = sentence;
while ((p = strstr(p, old_word)) != NULL) { // 使用strstr函数查找要替换的单词
int offset = p - sentence; // 计算单词在字符数组中的偏移量
int new_word_len = strlen(new_word);
int old_word_len = strlen(old_word);
if (new_word_len > old_word_len) { // 如果替换后的单词比原单词长,则需要扩展字符数组
int expand_len = new_word_len - old_word_len;
if (len + expand_len >= MAX_LEN) { // 判断是否超过字符数组最大长度
printf("字符数组长度不足,替换失败!\n");
return 0;
}
for (i = len-1; i >= offset+old_word_len; i--) {
sentence[i+expand_len] = sentence[i];
}
} else if (new_word_len < old_word_len) { // 如果替换后的单词比原单词短,则需要缩小字符数组
int shrink_len = old_word_len - new_word_len;
for (i = offset+new_word_len; i <= len; i++) {
sentence[i-shrink_len] = sentence[i];
}
}
strncpy(sentence+offset, new_word, new_word_len); // 使用strncpy函数替换单词
len = strlen(sentence);
p += new_word_len; // 移动指针
}
printf("替换后的句子为:\n%s\n", sentence);
return 0;
}
```
注意,以上代码只是一种实现方式,还有很多其他的实现方式,可能会更简洁、高效。
阅读全文