统计一个英文文件中各单词出现的次数,用一位数组如何实现

做一个词频统计程序,该程序具有以下功能:
(1)可倒入任意英文文本文件
(2)统计该英文文件中单词数和各单词出现的频率(次数),并能将单词按字典顺序输出。
求各单词出现的频率(次数),求大神 帮助,用一位数组实现
我有想法,不知道怎么做:
char temp[100] 是存放着从文件中读取的所有单词
定义一个数组 char a[10]
for(i=0;temp[i]!=' ';i++)
a[i]=temp[i]//先把第一个单词取出来存放在这个数组中
文件中单词存放形式如下:
good cat estimate(每个单词之间用一个空格隔开)
然后把第一个单词与原来的数组 的每个单词进行比对
先看长度是否相同,若相同,看是否每个字母是否相同,若依然相同,则两个单词相等,以此类推
Int i;每比较完一个单词,i+2 相当于移到了第二个单词的第一个字母
就这样

第1个回答  推荐于2017-09-12

你的想法逻辑上不错,但是不可采取的。因为文件要是很大的话,能全部读进来吗?下面提供一个做参考。

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "ctype.h"
#include "string.h"
#include "stdlib.h"
struct WORD{
    char w[21];
    int n;
};
int main(void){
    int i,j,k,l;
    struct WORD w[1000];
    FILE *fp;
    if((fp=fopen("123.txt","r"))==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    i=0;
    while(fscanf(fp,"%s",w[i].w),!feof(fp)){
        if(!isalpha(w[i].w[0]))
            strcpy(w[i].w,w[i].w+1);
        if(!isalpha(w[i].w[j=strlen(w[i].w)-1]))
            w[i].w[j]='\0';
        for(j=0;j<i;j++)
            if(strcmp(w[j].w,w[i].w)==0){
                w[j].n++;
                break;
            }
        if(j>=i)w[i++].n=1;
    }
    fclose(fp);
    for(k=0;k<i;k++){
        for(l=k,j=l+1;j<i;j++)
            if(strcmp(w[l].w,w[j].w)>0) l=j;
        if(l!=k){
            w[i]=w[l];
            w[l]=w[k];
            w[k]=w[i];
        }
        printf("%-20s%d\n",w[k].w,w[k].n);
    }
    return 0;
}

追问

好多地方看不懂,可以帮我加上注释吗?谢谢!
如下:
if(!isalpha(w[i].w[0]))
w[i].w
w[j=strlen(w[i].w)-1]
w[i++].n=1

追答

if(!isalpha(w[i].w[0]))//如果一个字符串的开头字符不是字母,则用下一行的语句抹掉它
strcpy(w[i].w,w[i].w+1);
if(!isalpha(w[i].w[j=strlen(w[i].w)-1]))//如果字符串的最后一个字符不是字母,用下一行清0
w[i].w[j]='\0';

追问

谢谢!

本回答被提问者和网友采纳
相似回答