编写一程序(应该有多个函数),允许从键盘输入任意多个英语单词(单词可以重复), 中间用空格分开,输入 0 表示输入结束。该程序可以统计同一个英语单词被输入几次,最后 对英文单词按字典顺序输出,后面跟上该单词被输入的次数。(提示,尝试用结构体组织数据, 把单词和该单出现的次数用一个结构体来描述。) 比如输入: book am book is book am 0 输出:am 2 book 3 is 1
时间: 2024-04-17 12:27:07 浏览: 106
下面是一个示例程序,可以实现你的需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_WORDS 100
// 结构体用于存储单词及其出现次数
struct WordCount {
char word[50];
int count;
};
// 函数用于判断单词是否已经存在于结构体数组中
int isWordExist(struct WordCount words[], int numWords, char* word) {
for (int i = 0; i < numWords; i++) {
if (strcmp(words[i].word, word) == 0) {
return i;
}
}
return -1;
}
// 函数用于将单词插入结构体数组中
void insertWord(struct WordCount words[], int* numWords, char* word) {
int index = isWordExist(words, *numWords, word);
if (index != -1) {
words[index].count++;
} else {
strcpy(words[*numWords].word, word);
words[*numWords].count = 1;
(*numWords)++;
}
}
// 函数用于按字典顺序排序结构体数组
void sortWords(struct WordCount words[], int numWords) {
for (int i = 0; i < numWords - 1; i++) {
for (int j = 0; j < numWords - i - 1; j++) {
if (strcmp(words[j].word, words[j + 1].word) > 0) {
struct WordCount temp = words[j];
words[j] = words[j + 1];
words[j + 1] = temp;
}
}
}
}
int main() {
struct WordCount words[MAX_WORDS];
int numWords = 0;
char word[50];
printf("请输入单词(以空格分隔,输入0表示结束):\n");
while (1) {
scanf("%s", word);
if (strcmp(word, "0") == 0) {
break;
}
insertWord(words, &numWords, word);
}
sortWords(words, numWords);
printf("按字典顺序输出单词及其出现次数:\n");
for (int i = 0; i < numWords; i++) {
printf("%s %d\n", words[i].word, words[i].count);
}
return 0;
}
```
你可以将以上代码保存为一个名为 `word_count.c` 的文件,并使用 C 编译器进行编译运行。编译命令如下:
```
gcc word_count.c -o word_count
```
运行生成的可执行文件:
```
./word_count
```
然后,你可以按照提示输入单词,以空格分隔,输入 0 表示结束。程序会按照字典顺序输出单词及其出现次数。
阅读全文