程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 一到簡單的的小程序:寫一個程序,分析一個文本文件(英文文章)中各個詞出現的頻率,並且把頻率最高的10個詞打印出來

一到簡單的的小程序:寫一個程序,分析一個文本文件(英文文章)中各個詞出現的頻率,並且把頻率最高的10個詞打印出來

編輯:C++入門知識

       解決這個問題只要完成單詞的識別和統計結果的排序這連個核心功能即可。剩下的細節可以逐漸完善。首先我想到單詞的的儲存問題,我第一個想到了鏈表,因為數組存在著內存分配問題。我想到可以定義一個數據類型來儲存單詞和它出現的次數,然後在排序即可。而單詞的儲存要用到字符數組,這樣單詞的識別只需對輸入字符判斷截取即可完成。有了大概思路後,我又感覺單詞存在字符數組中是由於單詞長度不同會浪費空間,於是決定從網上找類似的列子,去尋找更好的方法。

下面是來自網上的代碼:

#include<iostream><fstream><>
 {
=;name= readfile(danci*&inchar, &{
ifstream infile((!infile) {cout<<<<endl;>> i=( ;i<counter;i++(temp==inchar[i].name) { inchar[i].num++;(i==counter&&inchar[i].name!==++++ outfile(danci*inchar,{
ofstream outfile(( i=;i<counter;i++<<<<inchar[i].name<<endl<<<<inchar[i].num<<*inchar= danci[ counter=

該程序設計的十分簡練,而且在不考慮標點符號的情況下能准確同幾個單詞出現的個數。但也存在很多缺陷,由於使用數組的思想存儲單詞使得當讀入文章過小時會浪費空間,過大時又需要改變參數,很不方便。而且由於讀入時作為單詞分割的是空格、換行,會把標點誤判為單詞 的一部分,出現類似“happy,”這樣的單詞。同時本程序單詞大小寫敏感,我個人認為這不符合要求。於是我對程序做出了修改。
如下:

#include<iostream><fstream><>
 {
 name[ Word * readfile( Word*&{
    ifstream infile(>>(!infile) {cout<<<<endl; a,temp[ Word * i=]=         ((a>=&&a<=)||(a>=&&a<=)||temp[]== (a>=&&a<=||a>=&&a<==++(infile.eof())==head->(!_stricmp(temp,p->->num++;=p->(!p&&temp[]!==->->num=->next=head->->next= outfile( Word*& Word *=head-><<<<p->name<<endl<<<<p->num<<=p-> ( Word*head, Word *=head->( i=;i<n;i++<<<<p->name<<endl<<<<p->num<<=p-> getsort( Word*& Word *p,*q,*s,*==head->=p->->next=(p&&p->num>s->==p->->next==s->->next===head->= Word *=->next=(head,


我為了達到對單詞的准確識別,把源程序的字符串存取單詞改為用字符數組存取單詞再賦給字符串變量name。解決了單詞識別,但是有點浪費空間,求大神解決。同時將自定義類型用鏈表代替數組方便了排序,也克服了空間非配問題。但在文件的存取上遇到了問題。有關文件讀取的結尾問題望大神指點。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved