单词统计_统计文章中每个单词出现的频率
//预先存入工程文件的文章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) 编辑 收藏 举报