//预先存入工程文件的文章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;
}
