单词统计_统计文章中每个单词出现的频率

//预先存入工程文件的文章tex文档
#include<stdio.h>
#include<string.h>
//using namespace std
typedef struct//储存字符和权值
{   char str[20];
    int mount;
}tj;

int main()
{
    int i,j,k,n=0;  int allmount=0;
    tj TJ[3000];//********************只需修改该两行便能改变统计容量
    for(i=0;i<3000;i++)   //初始化 ,最大能记录3000种不同(单词)的权值信息
    {   
        for(j=0;j<20;j++)
            TJ[i].str[j]='\0';//存储字符的数组全部置空
        TJ[i].mount=0;//权值置为0
    }
    char strl[20]={'\0'};//读取的字符串(单词)临时存储在该数组中
    char s[300000]={'\0'}, *p;//存储从文本文档中读过来的信息(字符)//**************能读入的文本容量在此可修改
    FILE *fp;
    fp=fopen("文档.txt","r");  
    fgets(s,250000,fp);//从文本文档中读取250000个字符存储在s[60000]中(读不到换行后的文字信息)
    //char *p="the the the of of of he he ";
    i=0;    p=s;//用指针指向待统计的文本信息
    for(  ;*p!='\0';p++)//注意记事本里的空格字符' '和空字符'\0'是有区别的(光标的能够放的最右位置就是右边有多少空格字符)
    {
        if(*p!=' '&&*p!=','&&*p!='.'&&*p!='?'&&*p!=';'&&*p!=':')   j=1;
        else   j=0;    
        if(j==1) 
        { strl[i]=*p;  i++; }//读取字符临时存储于strl[i]
        else
        {   if(strl[0]!=NULL)  //或strl[0]!='\0'
            {    for(j=0;j<n;j++)
                    if(!strcmp(TJ[j].str,strl)) //如果存在已有的单词与新读取的单词相同,权值+1 /*(TJ[j].str==strl)总是=0???*/ 
                    {   TJ[j].mount++;  
                        for(k=0;k<20;k++)   strl[k]='\0';//重新置strl[]为空串
                           break;  
                    }
                if(j==n)  //原来读取的单词中没有于当前读取的单词相同的情况
                {  strcpy(TJ[n].str,strl);                     
                   for(k=0;k<20;k++)  strl[k]='\0';
                   TJ[n].mount=1;  
                   n++; 
                }
                i=0;
                allmount++;//遇到非字符串就加1
            }  
            //allmount++;//遇到非字符串就加1,放在此处时空格也被算入
        }    
    }
    printf("共统计%d个单词\n", allmount);//输出统计的单词总数
    int jianyan=0;
    for(i=0;i<n;i++)//输出单词及其权值
    {   if(i%3==0)  printf("\n");        
        printf("(%3d) %-15s",i,TJ[i].str);
        printf("%-5d",TJ[i].mount);    
        jianyan+=TJ[i].mount;
    }
    printf("\n(检验统计)共统计%d个单词\n", jianyan);//*******************用于检验
    getchar();
    return 0;
}
    

posted on 2014-03-15 22:32  IThinktan  阅读(3405)  评论(0编辑  收藏  举报

导航