设计思路:
读文件里的文章一次只能读一个字符,所以就用一个字符数组(以下用WZ来表示这个数组)来把整篇文章以字符的形式存起来。存单词的同时还得存单词的个数,便想到用结构体数组(用DC来表示)来存储单词和单词个数。结构体包含一个字符数组(用A表示)和一个int型变量(用N表示)分别存放单词和单词个数。要把单词从字符中提出来,想到用非字母的字符来区分。初始化DC,让DC中每一个结构体中的N都等于0。先建立一个字符数组(用B来表示),然后从WZ[0]开始依次判断是否是英文字母,若是英文字母则便依次保存在B数组中,若不是字母字符那么之前的保存在B中的字母组合起来便是一个单词。然后让B依次从DC[0].A开始来比较,若相同则DC[0].N+1,若不相同则继续往后比,若把整个DC全部比完都没有相同的(之前假设DC存到第M个)然后让DC[M+1].A等于B同时DC[M+1].N+1。然后把B清空开始读WZ下一个字符。直到把WZ最后的字符读出来,循环结束。然后用冒泡法以DC[i].N的大小,从大到小给DC排序。然后输出前十个就行了。
程序代码:
#include <iostream.h> #include <stdio.h> #include <string.h> typedef struct{ int n; char da[100]; }danci; //建文件(题目没要求) /*void jwj() { FILE * in; char ch,a[10]; cout<<"输入文件名:"; cin>>a; if((in=fopen(a,"w"))==NULL) { cout<<"error!!"; } cout<<"输入单词,以“#”结束: "<<endl; ch=getchar(); while(ch!='#') { fputc(ch,in); ch=getchar(); } fclose(in); }*/ //读文件 void dwj(char wz[]) { FILE * out; int i=0; char ch,a[10]; cout<<"输入文件名:"; cin>>a; out=fopen(a,"r"); while(!feof(out)) { ch=fgetc(out); wz[i]=ch; i++; } wz[i]='#'; wz[i+1]='