c语言用链表实现,统计一个英文文本文件中每个单词的出现次数(词频统计),结果按单词词典序输出到屏幕

Python020

c语言用链表实现,统计一个英文文本文件中每个单词的出现次数(词频统计),结果按单词词典序输出到屏幕,第1张

#include <stdio.h>

#include <string.h>

int main(void)

{

int a = 0, b = 0, c = 0

char buf[128]

FILE *fp

/* 打开文件,文件名必须大写 */

fp= fopen("DATA5610.TXT", "r")

if (!fp) {

printf("No 'DATA5610.TXT' found.\n")

return -1

}

/* 逐次读取单词,空格或回车分割 */

while (fscanf(fp, "%s", buf) >0) {

/* 如读取到的单词是 if,则a自增 1 */

if (strcmp(buf, "if") == 0)

a++

else if (strcmp(buf, "while") == 0)

b++

else if (strcmp(buf, "for") == 0)

c++

}

printf("if: %d, while: %d, for: %d\n", a, b, c)

fclose(fp)

return 0

}

思路示意:

char word[1000][20] ={0}//统计1000个单词,每个单词20字节长

int wordcount=0

int wordfreq[1000]= {0}//每个单词的词频

char line[1000]//每行最多1000个字母

int wordstart,wordend,ii

FILE *fp = fopen(文本文件)

while(!feof(fp))

{

scanf(fp,"%s",line)//读取一行

wordstart=0

for(wordend=wordstartwordstart<strlen(line) &&wordend<strlen(line)wordend++) //查找空格,切分单词

{

if (line[wordend]==' ')

{

line[wordend]=0x00

for(ii=0ii<wordcountii++) //查找单词是否在word队列

{

if (!strcmp(word[ii], line[wordstart]) //单词已经存在

{

wordfreq[ii] ++

break

}

}

if (ii>=wordcount) //单词不存在

{

strcpy(word[wordcount], line[wordstart], strlen(line[wordstart])

wordcount++

}

wordstart = wordend + 1

}

}

if (wordstart<strlen(line)) //此行最后一个单词

{

line[wordend]=0x00

for(ii=0ii<wordcountii++) //查找单词是否在word队列中

{

if (!strcmp(word[ii], line[wordstart]) //单词已经存在

{

wordfreq[ii] ++

break

}

}

if (ii>=wordcount) //单词不存在

{

strcpy(word[wordcount], line[wordstart], strlen(line[wordstart])

wordcount++

}

wordstart = wordend + 1

}

}

}

fclose(fp)

//此时,word队列中保存了读取的所有单词,wordfreq队列中保存了相应的词频。

//使用排序算法进行排序(代码可以在网上搜)

for(ii=0ii<wordcountii++)

printf(" %s -> %d\n", word[ii], wordfreq[ii])

return 0

对w进行循环与字符串a比对

比如"is"与a进行比对,找到a中所有有a地方然后判断该位置是否为一个单词是则在对应b中增加数字

如果代码不想自己写的话

我可以有偿代劳