C语言编写程序,逐行输入正文(以空行结束),从正文行中分拆出英文单词,输出一个按字典编辑顺序排列的单词表。约定:单词仅由英文字母组成,单词之间由非英文字母分隔;最长单词为20个英文字母;相同单词只输出一个;大小写字母是不同的字母。
时间: 2024-04-29 11:26:58 浏览: 183
好的,你可以先看一下下面的 C 代码,它可以实现你描述的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LENGTH 20
#define MAX_WORDS 1000
typedef struct {
char word[MAX_WORD_LENGTH + 1];
int count;
} Word;
int compare_words(const void* a, const void* b) {
return strcmp(((Word*)a)->word, ((Word*)b)->word);
}
int main() {
char line[1000];
char word[MAX_WORD_LENGTH + 1];
int num_words = 0;
Word words[MAX_WORDS];
// 逐行读入正文
while (fgets(line, sizeof(line), stdin) != NULL) {
// 如果是空行,停止输入
if (line[0] == '\n') {
break;
}
// 分离出单词
int i = 0;
while (line[i]) {
int j = 0;
while (isalpha(line[i]) && j < MAX_WORD_LENGTH) {
word[j++] = tolower(line[i++]);
}
if (j > 0) {
word[j] = '\0';
// 查找单词是否已经存在
int k;
for (k = 0; k < num_words; k++) {
if (strcmp(words[k].word, word) == 0) {
words[k].count++;
break;
}
}
// 如果单词不存在,加入单词表
if (k == num_words) {
if (num_words == MAX_WORDS) {
fprintf(stderr, "Too many words\n");
exit(1);
}
strcpy(words[num_words].word, word);
words[num_words].count = 1;
num_words++;
}
}
i++;
}
}
// 按字典序排序单词表
qsort(words, num_words, sizeof(Word), compare_words);
// 输出单词表
int i;
for (i = 0; i < num_words; i++) {
printf("%s\n", words[i].word);
}
return 0;
}
```
该程序中,我们首先定义了一个结构体 `Word`,用于存储单词及其出现次数。然后,我们逐行读入正文,分离出单词,并在单词表中查找该单词是否已经存在。如果单词不存在,我们就将其加入单词表,并增加单词表的大小。最后,我们按字典序排序单词表,并输出其中的单词。
需要注意的是,我们在比较单词时,应该将其转换为小写字母,以便正确地排序单词表。
阅读全文