用C语言实现统计出现次数最多的单词,统计一个英文的文本文件中出现次数最多的前10个单词规定,单词的含义为连续的字母大写或小写构成的字符串字母以外的其他符号和空白符号都是为单词之间的分隔符输出出现次数最多的前10个单词及其出现次数大小写不同的单词是为同一单词
时间: 2023-11-28 09:46:16 浏览: 173
以下是用C语言实现统计出现次数最多的单词的代码,可以实现统计一个英文的文本文件中出现次数最多的前10个单词。其中,单词的含义为连续的字母大写或小写构成的字符串,字母以外的其他符号和空白符号都是为单词之间的分隔符。输出出现次数最多的前10个单词及其出现次数,大小写不同的单词是为同一单词。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 100
#define MAX_WORDS 1000000
typedef struct {
char word[MAX_WORD_LEN];
int count;
} WordItem;
WordItem words[MAX_WORDS];
int numWords = 0;
int compareWords(const void *a, const void *b) {
WordItem *w1 = (WordItem *)a;
WordItem *w2 = (WordItem *)b;
return w2->count - w1->count;
}
void addWord(char *word) {
int i;
for (i = 0; i < numWords; i++) {
if (strcasecmp(words[i].word, word) == 0) {
words[i].count++;
return;
}
}
strcpy(words[numWords].word, word);
words[numWords].count = 1;
numWords++;
}
int main(int argc, char *argv[]) {
FILE *fp;
char word[MAX_WORD_LEN];
int i, j;
if (argc != 2) {
printf("Usage: %s filename\n", argv[0]);
return 1;
}
fp = fopen(argv[1], "r");
if (fp == NULL) {
printf("Cannot open file %s\n", argv[1]);
return 1;
}
while (fscanf(fp, "%s", word) != EOF) {
int len = strlen(word);
int isWord = 1;
for (i = 0; i < len; i++) {
if (!isalpha(word[i])) {
isWord = 0;
break;
}
}
if (isWord) {
addWord(word);
}
}
qsort(words, numWords, sizeof(WordItem), compareWords);
printf("The top 10 words are:\n");
for (i = 0; i < 10 && i < numWords; i++) {
printf("%s: %d\n", words[i].word, words[i].count);
}
fclose(fp);
return 0;
}
```
阅读全文