用C语言编一程序,它读入一行正文,统计在正文中出现的每个单词的次数,并按照字典顺序显示结果。 例如,如果输入的正文为:how do you do?
时间: 2024-03-25 14:39:30 浏览: 40
好的,以下是用C语言编写的程序,可以实现读入一行正文,统计在正文中出现的每个单词的次数,并按照字典顺序显示结果:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 100
struct word {
char str[MAX_WORD_LEN];
int count;
};
int main() {
char line[MAX_WORD_LEN];
int len, i, j, k, count;
struct word words[MAX_WORD_LEN / 2];
printf("请输入一行正文:\n");
fgets(line, MAX_WORD_LEN, stdin);
len = strlen(line);
// 统计每个单词出现的次数
count = 0;
for (i = 0; i < len; i++) {
// 跳过非字母字符
if (!isalpha(line[i])) {
continue;
}
// 找到单词的结束位置
j = i;
while (j < len && isalpha(line[j])) {
j++;
}
// 将单词存入数组中
for (k = 0; k < count; k++) {
if (strncmp(words[k].str, line + i, j - i) == 0) {
words[k].count++;
break;
}
}
if (k == count) {
strncpy(words[k].str, line + i, j - i);
words[k].count = 1;
count++;
}
i = j;
}
// 按照字典顺序排序
for (i = 0; i < count - 1; i++) {
for (j = i + 1; j < count; j++) {
if (strcmp(words[i].str, words[j].str) > 0) {
struct word temp = words[i];
words[i] = words[j];
words[j] = temp;
}
}
}
// 输出结果
printf("各个单词出现的次数如下:\n");
for (i = 0; i < count; i++) {
printf("%s:%d\n", words[i].str, words[i].count);
}
return 0;
}
```
你可以将以上代码复制到一个文本编辑器中,保存为一个以 `.c` 为扩展名的文件,然后在命令行中使用 C 编译器进行编译。例如,在 Windows 下,你可以使用以下命令进行编译:
```
gcc word_count.c -o word_count
```
编译完成后,你可以在命令行中输入 `word_count` 来运行程序,按照提示输入一行正文,程序将会输出每个单词出现的次数。
阅读全文