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