#include <stdio.h>
#include"string.h"
#include <stdlib.h>
#define N 100000
#define M 10000
int fun(char a[])
{
int sum=0;
for(int i=0;i<strlen(a);i++)
sum+=a[i];//字符數字化→ACSII碼之和是單詞標誌之壹;?
return sum;
}
int main() {
/*_________________________________________________*/
FILE *fp;
char b[N + 1];
//判斷文件是否打開
if ( (fp = fopen("D:\\英語論文.txt", "rt")) == NULL )/*這裏D:\\ 英語論文.txt 是路徑;讀取D盤下,名為(英語論文)的文本文件*/?
{
puts("文件讀取失敗!\n");
exit(0);
}
else
{
puts("文件讀取成功");
puts("開始計算");
}?
//循環讀取文件的每壹行數據
while( fgets(b, N, fp) != NULL )
{
/*__________________________________________*/
int d[M]={0},x=0;
char a[111][11]={'\0'};
char t[11]={'\0'};
int k=0,j=0;?
for(int i=0;i<strlen(b);i++)
{
if((b[i]>='a'&&b[i]<='z')||(b[i]>='A'&&b[i]<='Z'))//不是空格就儲存在二維數組中,壹行壹個單詞;?
a[k][j++]=b[i];
if(b[i]==' ')//遇到下壹個空格就換行,進而開始下壹個單詞的儲存;?
{
k++;
j=0;
}
}
int max=fun(a[0]);
for(int i=0;i<=k;i++)
{
d[fun(a[i])]++;//用每個單詞的ASCII碼之和桶排序,這也即是字典序;?
if(fun(a[i])>max)
max=fun(a[i]);//找出最大的作為上限;?
}
int name;
for(int i=0;i<=max;i++)
{
name=0;
for(int j=0;j<=k;j++)
{
if(fun(a[j])==i)/*a[j]的ASCII碼之和等於i,說明d[i]是記錄單詞a[j]的,d[i]的數就是a[j]出現的頻率;*/?
{
name=j;//記錄單詞下標;?
}
}
if(d[i]!=0)//d[i]!=0即i是某個單詞的ASCII碼之和;?
{
printf("%s %d\n",a[name],d[i]);//輸出?
}
}
/*___________________________________________*/
}
//結束關閉文件
fclose(fp);
return 0;
}
這是修改過的,不過沒太大變化,只是加了壹個文件讀取代碼;