高等教育單詞統(tǒng)計程序C_第1頁
高等教育單詞統(tǒng)計程序C_第2頁
高等教育單詞統(tǒng)計程序C_第3頁
高等教育單詞統(tǒng)計程序C_第4頁
高等教育單詞統(tǒng)計程序C_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、單詞統(tǒng)計問題描述文字研究人員需要統(tǒng)計某篇英文小說中某些特定單詞的出現(xiàn)次數(shù)和位置,試寫出一個實現(xiàn)這一目標的文字統(tǒng)計系統(tǒng)。這稱為“文學研究助手”。要求算法輸入:文本文件和詞集。算法輸出:單詞出現(xiàn)的次數(shù),出現(xiàn)位置所在行的行號(同一行出現(xiàn)兩次的只輸出一個行號)。算法要點:(1)文本串非空且以文件形式存放。(2)單詞定義:用字母組成的字符序列,中間不含空格,不區(qū)分大小寫。(3)待統(tǒng)計的單詞不跨行出現(xiàn),它或者從行首開始,或者前置一個空格。(4)數(shù)據(jù)結構采用二維鏈表,單詞結點鏈接成一個鏈表,每個單詞的行號組成一個鏈表,單詞結點作為行號鏈表的頭結點。需求分析用戶需求:用戶可以通過該程序查詢和統(tǒng)計一篇英文文章中

2、某些特定單詞出現(xiàn)次數(shù)和位置。功能需求:用戶可以輸入單詞來查詢單詞出現(xiàn)次數(shù)和位置; 程序可以正確顯示查詢結果; 用戶可以選擇是否在一次輸出后繼續(xù)查詢; 在一次查詢中的結果記錄到一個二維鏈表中。概要設計為達到設計要求,本程序采用二維鏈表存儲單詞結點和相關的位置信息。抽象數(shù)據(jù)類型:struct nodeint col; /行坐標int row; /所在行的列坐標node* next; /指向下一個坐標結點的指針; /單詞坐標坐點類型struct Nodechar words20; /單詞數(shù)組node* ptr; /指向單詞坐標結點的指針Node* next; /指向下一個單詞結點的指針int num

3、; /單詞所含字符個數(shù); /單詞結點class TLinkpublic:TLink() head = NULL; /構造函數(shù)TLink() /析構函數(shù)while( head != NULL )Node* temp;temp = head;head = head -> next;delete temp;void Insert( char* Item );/前條件:參數(shù)Item為一個字符數(shù)組。/后條件:Item所包含的單詞被插入到鏈表。void calcute(char *szFile,int size);/前條件:szFile以正確保存了文本字符,size為文本字符長度。/后條件:統(tǒng)計鏈表

4、每一個插入的單詞的個數(shù)及所在行、列坐標。Node* gethead();/前條件:鏈表已初始化/后條件:返回鏈表頭指針private:Node* head;char A_to_a( char alp );/前條件:alp為一個正確的英文字母/后條件:如果alp是大寫字母,則轉化為小寫字母,否則不變。void showwindow();/后條件:顯示統(tǒng)計結果。void show_text();/前條件:在正確的路徑上存在一個英文文本。/后條件:讀入英文文本到字符數(shù)組并顯示在屏幕上。void input();/后條件:讀入用戶輸入的字符并插入到單詞鏈表。數(shù)據(jù)結構圖解:將從文件流讀入的文章字符存到s

5、zFile字符數(shù)組中,以空格計數(shù)行單詞個數(shù),以換行符記錄文章列數(shù),將輸入后插入到鏈表中的單詞與字符數(shù)組中的單詞比較,遇到相等的則將當前的行列數(shù)插入到鏈表的位置結點中,并且單詞個數(shù)加1。本程序允許用戶選擇是否重復進行,并且對于在一次操作中重復輸入的單詞,在鏈表中不進行重復插入。功能模塊:模塊調(diào)用:程序流程圖:主要模塊偽碼概要設計:插入函數(shù)(參數(shù):Item【】數(shù)組): 新建單詞結點;while( Itemi != '0' ) 復制各字符到單詞結點的單詞數(shù)組中; 記錄單詞字母個數(shù); 插入單詞字母個數(shù)到鏈表相應域;temp -> wordsi = '0'查找并比較

6、鏈表中是否已有要插入的單詞; 如果有 不進行插入并銷毀新建結點; 否則 插入新建的單詞結點;/*/統(tǒng)計函數(shù)( 參數(shù):char *szFile, int size)while( 沒有到文本字符的結尾 )依次遍歷文本字符,遇到非字母字符時計數(shù)單詞所含字母個數(shù);while( 沒有到鏈表尾 )if( 單詞結點所含單詞的字母個數(shù)與計數(shù)相等 )忽略大小寫比較本次遍歷到的單詞和鏈表中的結點單詞;if(相等) 插入行列值遇空格行單詞個數(shù)加1; 遇換行列數(shù)加1;/*/結構顯示模塊while( 沒到鏈表尾 )輸出結點單詞;如果存在,則輸出單詞的所有行、列值及出現(xiàn)次數(shù); 否則輸出沒有該詞或輸入錯誤信息;/*/輸入模

7、塊doif( 鏈表不空 )清空鏈表;輸出提示信息;接受用戶輸入;while( true )輸入的是結束字符; 退出;記錄輸入逗號前的單詞;插入到鏈表;繼續(xù)輸入;if( 鏈表空 )輸出"沒有插入任何單詞!";else統(tǒng)計;顯示結果;提示是否繼續(xù);輸入;while( 不繼續(xù) );詳細設計程序清單:/FILE:source.h#ifndef SOURCE_H#define SOURCE_Hstruct nodeint col;int row;node* next;struct Nodechar words20;node* ptr;Node* next;int num;class

8、TLinkpublic:TLink() head = NULL; TLink()while( head != NULL )Node* temp;temp = head;head = head -> next;delete temp;void Insert( char* Item );void calcute(char *szFile,int size);Node* gethead();private:Node* head;char A_to_a( char alp );void showwindow();void show_text();void input();#endif#inclu

9、de<iostream>#include<fstream>#include<cstdlib>#include"source.h"usingnamespace std;TLink link;int i=0;char szFile2000;int main()show_text();cout << endl;input();return 0;/*/void TLink:Insert(char *Item)int flag = 0;Node* temp;temp = new Node;int i = 0;while( Itemi !

10、= '0' )temp -> wordsi = Itemi;+ i;temp -> num = i;temp -> wordsi = '0'Node* ptrr = NULL;ptrr = link.gethead();while( ptrr != NULL ) if( ptrr -> num = temp -> num )int n;for( n = 0; n < i; + n )if( A_to_a( ptrr -> wordsn ) != A_to_a( Itemn ) )break;if( n = i )flag

11、 = 1;break; ptrr = ptrr -> next;if( flag != 1 ) temp -> ptr = NULL; temp -> next = NULL; Node* Temp = head;if( head = NULL ) head = temp; else while( Temp -> next != NULL ) Temp = Temp -> next; Temp -> next = temp; elsedelete temp;/*/char A_to_a( char alp )if( ( alp >= 'A

12、9; ) && ( alp <= 'Z' ) )alp = alp + 32;return alp;/*/void TLink:calcute(char *szFile, int size)/cout << "calcute is called!" << endl;int i = 0; /記錄已搜索過的字符數(shù)-1intcol = 1;/列標int row = 0;/行標int count;/記錄空格數(shù)-1Node* ptrr = NULL;while( i < size )ptrr = link.gethe

13、ad();int j = 0;/對每個單詞從開始計數(shù)while( ( szFilei >= 'a' && szFilei <= 'z' ) | ( szFilei >= 'A' && szFilei <= 'Z' ) )+ i;+ j;while( ptrr != NULL )if( ptrr -> num = j )int n;for( n = 0; n <= j; + n )if( A_to_a( ptrr -> wordsn ) != A_to_a(

14、szFilei - j + n ) )break;if( n = j )node* temp;temp = new node;temp -> col = col;temp -> row = row;temp -> next = NULL;node* Temp = ptrr -> ptr;if( ptrr -> ptr = NULL )ptrr -> ptr = temp;elsewhile( Temp -> next != NULL ) Temp = Temp -> next; Temp -> next = temp;/插入行數(shù)ptrr =

15、 ptrr -> next;if( szFilei = ' ' | szFilei = 'n' )count = -1;while( szFilei = ' ' ) + i; /設置列數(shù) + row;/行的單詞個數(shù)加 + count;/單詞之間空格-1 row = row - count;if( szFilei = 'n' ) + col; /列遇到換行累加 + i;row = 0;/單詞的行個數(shù)清零 else+ i;cout << endl;/*/Node* TLink:gethead()return head

16、;/*/void showwindow()Node* curptr = link.gethead();while( curptr != NULL )int word_num = 0;for( int k = 0; curptr -> wordsk != '0' + k )cout << curptr -> wordsk;cout << endl;if( curptr -> ptr = NULL )cout << "沒有該詞,或輸入不正確!" << endl;elsewhile( curptr

17、-> ptr != NULL )cout << "("cout << curptr -> ptr -> col ;cout << ","cout << curptr -> ptr -> row ;cout << ")"cout << ' 'curptr -> ptr = curptr -> ptr -> next;word_num +;cout << endl;cout <<

18、"該單詞共出現(xiàn)" << word_num << "次!" << endl; curptr = curptr -> next;/*/void show_text()ifstream fin;fin.open("D:english.txt");if (fin.fail()cout<<"Input file opening failed.n"exit(1);char next;fin.get(next);while (! fin.eof() szFilei = nex

19、t;+ i; fin.get(next);szFilei = '0'for( int k = 0; k < i; + k )cout << szFilek;cout << "*Total number :" << i << endl;cout << "*" << endl;/*/void input()char Item40; /暫存數(shù)組char in; /接受輸入字符char ans; /判斷是否重新開始doif( link.gethead() != NULL

20、 )link.TLink();cout << "請輸入要統(tǒng)計的單詞,單詞之間用逗號隔開(輸入鍵結束,本程序忽略空格):" << endl;cin >> in;int flag = 1;while( true )if( in = '' )break;int m = 0;while( in != ',' ) Itemm = in;+ m;cin >> in;if( in = '' ) flag = 0;break;Itemm = '0'link.Insert( Ite

21、m );if( flag = 0 )break;cin >> in;if( link.gethead() = NULL )cout << "沒有插入任何單詞!" << endl;else link.calcute( szFile, i ); showwindow();cout << "是否繼續(xù)?(Y/y or N/n):"cin >> ans;while( ( ans != 'n' ) && ( ans != 'N' ) );運行結果結果分析輸入要

22、查找的單詞之后,單詞插入鏈表,停止輸入后,程序開始在文本字符中查找鏈表中的單詞。程序從文本數(shù)組順次掃描,并在掃描到空格時記錄一個單詞的掃描結束,并記錄單詞所含字母個數(shù),然后查找鏈表,如有和該單詞字母個數(shù)相同的記錄則進行比較,否則繼續(xù)查找下一個直到鏈表尾。此后程序繼續(xù)掃描文本字符數(shù)組的下一個單詞并和鏈表中單詞進行相同的比較過程,直到字符數(shù)組掃描完畢。要想在輸出結果后繼續(xù),則選擇Y或y繼續(xù),否則輸入N或n退出。最后輸出結果。本次運行中第一次操作輸入is,are,這是正確的輸入,則輸出正確的結果;第二次選擇y繼續(xù),輸入the,這也是正確的輸入,則輸出正確結果;第三次選擇y繼續(xù),輸入microsoft

23、,22%,microsoft,一、三個輸入正確,但是同樣的輸入,則按照程序設計,只輸出一次結果,第二次輸入錯誤,則程序報告輸入有誤。選擇n,程序按預期結束。收獲與體會通過本次的課程設計實驗,是我對數(shù)據(jù)結構的設計編程有了更好的理解,進一步學習了把學到的知識運用到實際的一些問題解決中去。鞏固了和提高了編程的能力,積累了一些編程技巧和經(jīng)驗。程序設計是選擇一種好的結構,然后設計一個好的算法。數(shù)據(jù)結構設計的好壞會直接影響到程序算法設計的可實現(xiàn)性及難易程度。在課程設計的過程中使我更深刻認識到結構設計的重要性,有時在結構中加一個記錄一個數(shù)字的變量也許會使程序代碼更明朗和易于設計。程序設計是一項看似枯燥卻會有

24、無窮樂趣的事情,我們在做編程設計時,需要極其的認真、求實、耐心和信心。一點的錯誤都不會使我們得到預期的結果,所以,我要繼續(xù)認真學習和練習,多動手動腦,循序漸進的提高自己的程序設計能力。附:讀入的文本:01 Microsoft Windows is a complex operating system. It offers02 so many featuresand does so much that it's impossible for 03 any one person to fully understandthe entire system. This 04 complexity

25、 also makes it difficult for someone to decide05 where to start concentrating the learning effort. Well, I 06 always like to start at the lowest level by gaining a solid 07 understanding of the system's basic building blocks. Once 08 you understand the basics, it's easy to incrementally 09 add any higher-level aspects of the system to your knowledge. 10 So this book focuses on Windows' basic building blocks and11 the fundamental concepts that you must know when architecting 12 and implementing software targeting the Windows operati

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論