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