我编程,我快乐!
每次编程之前,用我们专业特有的口号,激励、鞭策自己,细心、认真的编写每一个程序,实现一个比较完美的程序。
首先:分析题目,理清解题思路。
(1)、读取已经创建好的文本文件(英文文i章);
(2)、边读取的文件,边将文件中的单词以及出现的次数,保存在已经定义好的结构体中;
(3)、进行次数排序同时输出频率最高的十个单词以及出现次数;
(4)、在运行过程中加入了程序运行时间的统计。
其次:开始程序的各个模块的编写。
2-25:实现文件的读取及写入,文件读取时采用的是C++中的文件文件流 ifstream,文件的写入过程是一个非常繁杂的过程,起初定义了结构体,(如下) ,一个单词录入完成后(数组保存单独的一个单词),使用定义的结构体指针,指向下一个单词,通过循环,实现文件的读写。
struct Word
//自定义数据类型用于储存单词和出现次数
{
char name[30];
int num;
struct Word *next;
};
2-27:排序操作,通过选择排序,运用结构体指针,进行每个单词出现次数num的大小比较,依大到小进行排列,最后调用OutOff()函数输出出现频率最大的十个单词。
3-2:进行程序整合上传,基本完成程序要求。
最后: 程序源代码如下:
1 //For text document analysis and the maximum output frequency of ten words 2 //liujing ,February,25,2014 3 #include<iostream> 4 #include<fstream> 5 #include<string> 6 #include<sys/timeb.h> 7 #include<windows.h> 8 using namespace std; 9 struct Word 10 //自定义数据类型用于储存单词和出现次数 11 { 12 char name[30]; 13 int num; 14 struct Word *next; 15 }; 16 void ReadFile(struct Word *head); 17 void OutOff(struct Word *head,int n); 18 void Sort(struct Word *head); 19 20 void main() 21 { 22 23 // timeb t1,t2; 24 long t; 25 struct Word *head; 26 head=new Word; 27 head->next=NULL; 28 cout<<endl; 29 cout<<" *****************分析文本文件,输出频率最高的十个单词*************"<<endl; 30 cout<<endl; 31 //ftime(&t1);//获取开始时间 32 LARGE_INTEGER BegainTime ; 33 LARGE_INTEGER EndTime ; 34 LARGE_INTEGER Frequency ; 35 QueryPerformanceFrequency(&Frequency); 36 QueryPerformanceCounter(&BegainTime) ; 37 ReadFile(head); 38 Sort(head); 39 OutOff(head,10); 40 QueryPerformanceCounter(&EndTime) ; 41 t=(( EndTime.QuadPart - BegainTime.QuadPart )*1000 / Frequency.QuadPart); 42 // ftime(&t2);//获取结束时间 43 // t=(t2.time-t1.time)*1000+(t2.millitm=t1.millitm);//计算时间差 44 cout<<" 程序运行总时间为:"<<t<<"ms"<<endl; 45 46 } 47 48 void ReadFile(struct Word *head)////读入文件识别并储存单词,统计次数 49 { 50 char a,Tword[30]; 51 struct Word *p; 52 ifstream infile("father.txt"); 53 infile>>noskipws; 54 if(!infile) 55 { 56 cout<<"cannot open!"<<endl; 57 return; 58 } 59 while(infile) 60 { 61 int i=0; 62 infile.get(a); 63 Tword[0]=' ';//标记位用于判断是否输入单词 64 while((a>='a'&&a<='z')||(a>='A'&&a<='Z')||temp[0]==' ') 65 { 66 if(a>='a'&&a<='z'||a>='A'&&a<='Z') 67 { 68 Tword[i]=a; 69 i++; 70 } 71 infile.get(a); 72 if(infile.eof()) 73 break; 74 } 75 Tword[i]='\0'; 76 p=head->next; 77 while(p) 78 { 79 if(!_stricmp(Tword,p->name)) 80 { 81 p->num++; 82 break; 83 } 84 p=p->next; 85 } 86 if(!p&&Tword[0]!='\0') 87 { 88 p=new Word; 89 strcpy(p->name,Tword); 90 p->num=1; 91 p->next=head->next; 92 head->next=p; 93 } 94 } 95 infile.close(); 96 } 97 98 void OutOff(struct Word *head,int n) 99 { 100 struct Word *p; 101 p=head->next; 102 cout<<" 序号"<<" "<<"单词"<<" "<<"频率"<<endl; 103 for(int i=0;i<n;i++) 104 { 105 cout<<" "<<i<<" "<<p->name<<"------"<<p->num<<endl; 106 p=p->next; 107 } 108 } 109 void Sort(struct Word *head) 110 { 111 struct Word *p,*q,*s,*l; 112 q=head; 113 p=head->next; 114 s=p->next; 115 p->next=NULL; 116 while(s) 117 { 118 while(p&&p->num>s->num) 119 { 120 q=p; 121 p=p->next; 122 } 123 q->next=s; 124 l=s->next; 125 s->next=p; 126 s=l; 127 p=head->next; 128 q=head; 129 } 130 }
程序运行结果截图: