關於乙個文字檔案中的單詞統計和排序問題

2022-08-20 04:33:16 字數 1401 閱讀 1407

題目是:寫乙個程式,分析乙個文字檔案中各個單詞出現的頻率,並且把頻率最高的10個詞列印出來。

看到題目後,我首先在紙上把需要實現的功能和需要涉及到的知識寫出來,需要實現的功能是讀取文字檔案,記錄各個單詞出現的次數,利用排序將前十個單詞輸出。涉及的知識是文字檔案的開啟以及讀寫操作,排序演算法等。

我一開始的設想是在主函式中包含兩個函式,乙個讀取檔案中的字元,並且進行統計的函式,第二個就是排序的函式。在**實現的過程中,檔案的開啟關閉,讀取功能可以實現。排序功能過也能容易地實現,不過在統計時的字串和結構體的相關操作不熟悉,整個程式沒有能獨立實現。於是我從網上借鑑了大神們的程式設計思想,用的c語言中的一些知識。包括檔案的操作,指標的應用,結構體的定義等等。下面說說的我的具體實現過程和從借鑑的過程中學到的知識:

首先是要利用c語言讀取檔案,然後讀取乙個個的單詞,並進行統計它們出現的頻率。在這個過程中,為了防止標點符號也被讀入到單詞中,導致單詞的資料統計有誤,所以採用了乙個字元乙個字元讀取的方法,同時將字元限定在'a--z','a--z'之間,這樣單詞的統計以及大小寫就不會出錯了  。

然後就是對單詞進行排序,選出十個頻率最高的單詞,並列印出來。 在排序問題上,因為要保持單詞與頻率的一致性,所以並沒有採用冒泡法來進行排列,而是用頻率與陣列中儲存的十個單詞頻率進行比較,如果比陣列中的大,則將其列入陣列,並將陣列中本來的那個置為零,這樣每次都可以只取最大的那個。

在程式設計的過程中,明白了指標和結構體的結合後可以簡化很多操作步驟,讀取字元的時候直接取q=q->next;即可;在檔案方面也學到了很多知識,比如在c語言中檔案的操作方面,檔案開啟和檔案的讀寫。

下面是具體的**:

#include#include

#include

#include

#include

struct word;

void readfile(struct word*&head)//

從檔案中讀取單詞並統計出現次數

char ch,temp[30

];

struct word *p;

while(!feof(fp))

ch=fgetc(fp);

if(feof(fp)) break

; }

temp[i]='\0'

; p=head->next;

while

(p)

p=p->next;

}if(!p&&temp[0]!='\0'

)

}}void sort(struct word*&head) //排序

q=head;

while(q!=null)

else

q=q->next;}}

}void main() //

主函式

統計乙個文字檔案中單詞的個數(超簡單思路)

1.先將文字檔案中的內容追加到bufferstring型別的變數中,然後將bufferstring轉換為string型別,因為string類有乙個方法,可以將乙個串中某個字元,全部用指定字元 比如空格 來代替 string.replace a b 然後遇到空格就計數。轉換後計算是很簡單的,但是轉換非...

在乙個文字檔案中的單詞統計頻率並列印前十個

單詞結構體 struct word 這是統計單詞部分,用的是fgetc函式對文字進行讀取,因此沒有手動讀取過程,直接將txt放入指定目錄下就可以讀取,判斷是否讀完用了feof函式 void readfile struct word head 判斷是否是單詞 while feof fp ch fget...

在乙個文字檔案中的單詞統計頻率並列印前十個

設計分析 遇到這樣乙個程式設計,首先解決的是檔案讀入的問題 我選擇讀入txt 第二,英文文章中由英文本母,標點符號,其他字元組成,要將他們分離,這就用到了詞法分析,將每個單詞分離出來並且分析 第三,統計單詞個數 不一樣的單詞各有幾個 排序,輸出頻率最高的10個。要解決的是檔案讀取後儲存問題,就是放在...