



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、(完整)文本文件單詞的檢索與計數(完整)文本文件單詞的檢索與計數 編輯整理:尊敬的讀者朋友們:這里是精品文檔編輯中心,本文檔內容是由我和我的同事精心編輯整理后發布的,發布之前我們對文中內容進行仔細校對,但是難免會有疏漏的地方,但是任然希望((完整)文本文件單詞的檢索與計數)的內容能夠給您的工作和學習帶來便利。同時也真誠的希望收到您的建議和反饋,這將是我們進步的源泉,前進的動力。本文可編輯可修改,如果覺得對您有幫助請收藏以便隨時查閱,最后祝您生活愉快 業績進步,以下為(完整)文本文件單詞的檢索與計數的全部內容。 程序設計課程設計 報 告 學 院:軟件學院 專業班級:軟件 班 學 號: 姓 名:
2、指導教師: 時 間: 2012年 6月29日文本文件單詞的檢索與計數專業:軟件工程 班級: 1.1【問題描述】串是非數值處理中的主要對象,如在信息檢索、文本編輯、符號處理等許多領域,得到越來越廣泛的應用.在高級語言中也引入了串數據類型概念,并且串變量與其他變量(如整型、實型等)一樣,可以進行各種運算。然而,在各種不同類型的應用中,所處理的串有不同的特點,要想有效地實現串的處理,就必須熟悉串的存儲結構及其基本運算。本課程設計的目的就是熟悉串類型的實現方法和文本模式匹配方法,熟悉如何利用模式匹配算法實現一般的文本處理技術。本課程設計分兩步:首先,設計出串定位算法(即模式匹配算法)及其實現;然后,再
3、利用串定位算法設計文本文件的檢索及單詞的計數等操作.1.2【設計需求及分析】1。2.1 串模式匹配算法的設計要求在串的基本操作中,在主串中查找模式串的模式匹配算法-即求子串位置的函數index(s,t),是文本處理中最常用、最重要的操作之一.所謂子串的定位就是求子串在主串中首次出現的位置,又稱為模式匹配或串匹配.模式匹配的算法很多,在這里只要求用最簡單的樸素模式匹配算法.該算法的基本思路是將給定子串與主串從第一個字符開始比較,找到首次與子串完全匹配的子串為止,并記住該位置.但為了實現統計子串出現的個數,不僅需要從主串的第一個字符位置開始比較,而且需要從主串的任一給定位置檢索匹配字符串,所以,首
4、先要給出兩個算法:1標準的樸素模式匹配算法2給定位置的匹配算法1.2.2 文本文件單詞的檢索與計數的設計要求要求編程建立一個文本文件,每個單詞不包含空格且不跨行,單詞由字符序列構成且區分大小寫;統計給定單詞在文本文件中出現的總次數;檢索輸出某個單詞出現在文本中的行號、在該行中出現的次數以及位置.該設計要求可分為三個部分實現:其一,建立文本文件,文件名由用戶用鍵盤輸入;其二,給定單詞的計數,輸入一個不含空格的單詞,統計輸出該單詞在文本中的出現次數;其三,檢索給定單詞,輸入一個單詞,檢索并輸出該單詞所在的行號、該行中出現的次數以及在該行中的相應位置。1建立文本文件2給定單詞的計數3檢索單詞出現在文
5、本文件中的行號、次數及其位置4主控菜單程序的結構3【設計功能的實現】(用c或c+語言描述)詳細設計樸素模式匹配算法該算法的基本思想是:設有三個指針i,j,k,用i指示主串s每次開始比較的位置;指針j,k分別指示主串s和模式串t中當前正在等待比較的字符位置;一開始從主串s的第一個字符(i=0;j=1)和模式t的第一個字符(k=0)比較,若相等,則繼續逐個比較后續字符(j+,k+)。否則從主串的下一個字符(i+)起再重新和模式串(j=0)的字符開始比較.依此類推,直到模式t中的所有字符都比較完,而且一直相等,則稱匹配成功,并返回位置i;否則返回-1,表示匹配失敗。順序串的模式匹配算法如下:int
6、index(sstring s, sstring t) /求子串t在主串s中首次出現的位置int i,j,k,m,n;m=t.length; /模式串長度賦mn=s.length; /目標串長度賦nfor (i=0; i=n-m; i+) j=0; k=i; / 目標串起始位置i送入k while (j=m & s.chk=t.chj) k+; j+; /繼續下一個字符的比較 if (j=m) /若相等,則說明找到匹配的子串,返回匹配位置i,/否則從下一個位置重新開始比較 return i; /endforreturn 1; /endindex給定位置的串匹配算法該算法要求從串s1(為順序存儲
7、結構)中第k個字符起,求出首次與字符串s2相同的子串的起始位置。該算法與上面介紹的模式匹配算法類似,只不過上述算法的要求是從主串的第一個字符開始,該算法是上述算法的另一種思路:從第k個元素開始掃描s1,當其元素值與s2的第一個元素的值相同時,判定它們之后的元素值是否依次相同,直到s2結束為止。若都相同,則返回當前位置值;否則繼續上述過程,直至s1掃描完為止,其實現算法如下:int partposition(sstring s1, sstring s2, int k)int i, j;i=k1; /掃描s1的下標,因為c中數組下標是從0開始,串中序號相差1j=0; /掃描s2的開始下標while
8、 (i=s2.length) return i- s2。length; /表示s1中存在s2,返回其起始位置else return -1; /表示s1中不存在s2, 返回-1 /函數結束說明:以上兩個算法可統一為一個算法,即在子串定位算法index(s,t)的參數中增加一個起始位置參數即可.建立文本文件建立文件的實現思路是:(1)定義一個串變量;(2)定義文本文件;(3)輸入文件名,打開該文件;(4)循環讀入文本行,寫入文本文件,其過程如下: while (不是文件輸入結束) 讀入一文本行至串變量;串變量寫入文件;輸入是否結束輸入標志;(5)關閉文件。給定單詞的計數該功能需要用到前一節中設計的
9、模式匹配算法,逐行掃描文本文件。匹配一個,計數器加1,直到整個文件掃描結束;然后輸出單詞出現的次數。其實現過程如下:(1)輸入要檢索的文本文件名,打開相應的文件;(2)輸入要檢索統計的單詞;(3)循環讀文本文件,讀入一行,將其送入定義好的串中,并求該串的實際長度,調用串匹配函數進行計數。具體描述如下:while (不是文件結束) 讀入一行并到串中; 求出串長度; 模式匹配函數計數;(4)關閉文件,輸出統計結果. 檢索單詞出現在文本文件中的行號、次數及其位置這個設計要求與上一個類似,但要相對復雜一些.其實現過程描述如下:(1)輸入要檢索的文本文件名,打開相應的文件;(2)輸入要檢索統計的單詞;(
10、3)行計數器置初值0;(4)while (不是文件結束) 讀入一行到指定串中; 求出串長度; 行單詞計數器置0; 調用模式匹配函數匹配單詞定位、該行匹配單詞計數; 行號計數器加1; if (行單詞計數器!=0) 輸出行號、該行有匹配單詞的個數以及相應的位置;運行主控程序主控菜單程序的結構要求內容如下:(1)頭文件包含;(2)菜單選項包括: 1建立文件 2單詞計數 3單詞定位 4退出程序(3)選擇1-4執行相應的操作,其他字符為非法.程序代碼:#include stdio.hinclude stdlib.h#include #define list_init_size 500 /*線性表存儲空間
11、的初始分配量/define listincrement 10 /線性表存儲空間的分配增量*/define file_name_len 20 /文件名長度/define word_len 20 /*單詞長度*/#define maxstrsize 256define llength 110 /規定一行有110個字節*/typedef struct char chmaxstr; / ch是一個可容納256個字符的字符數組 */ int length; string;/* 定義順序串類型 /typedef struct char wordword; /存儲單詞,不超過20個字符*/ int coun
12、t; /單詞出現的次數/ elem_type;typedef struct elem_type elem; /*存儲空間基址/ int length; /當前長度/ int listsize; /當前分配的存儲容量*/ sqlist;void sqlist_init(sqlist sq, elem_type et) sq-elem = et; sqlength = 0;void sqlist_add(sqlist *sq, elem_type et, char word) int i; int j; for (i = 0; i length; i+) /*當前單詞與加入的單詞相同,直接統計,不
13、做插入 / if (strcmp(eti。word, word) = 0) eti。count+; return ; if (strcmp(eti。word, word) 0) break; if (sq-length = list_init_size) printf(”空間不足,單詞s插入失敗n”, word); return; for (j = sq-length; j i; j-) memcpy(et+j, et+j1, sizeof(elem_type); sqlength+; strcpy(eti。word, word); eti.count = 1;int sqlist_count
14、(sqlist *sq, elem_type *et) int i; int j=0; for(i=0;i單詞個數n”); for (i = 0; i sq。length; i+) x=strlen(eti.word); for(w=x-1;w=0;w-) if(eti.wordw90&eti.wordw122) eti.wordw= ; for(w=0;wx;w+) if (eti.wordw= ) y+; if(y=x) eti.count=0; y=0; else y=0; if(eti.count!=0) printf(”%20s%10dn”, eti。word, eti。count)
15、; else q+; j=sqlist_count(sq, et); printf(”ns的單詞總數為d個n”,file_name,j); printf(”n%s的非單詞個數為%d種n,file_name,q); printf(n”); int partposition (string s1,string s2,int k) int i,j; i=k1; / 掃描s1的下標,因為c中數組下標是從0開始,串中序號相差1 / j=0;/* 掃描s2的開始下標 / while(is1.length & js2。length) if(s1.chi=s2。chj) i+;j+; / 繼續使下標移向下一個
16、字符位置 */ else i=i-j+1; j=0; if (j=s2。length) return is2.length; else return -1;/* 表示s1中不存在s2,返回-1 */ /* 表示s1中存在s2,返回其起始位置 */ / 函數結束 / void substrcount() file fp; string s,t;/* 定義兩個串變量 */ char fname10; int i=0,j,k; printf(”輸入文本文件名:”); scanf(s”,fname); fp=fopen(fname,r”); printf(”輸入要統計計數的單詞:”); scanf(%
17、s,t.ch); t。length=strlen(t。ch); while(!feof(fp) memset(s。ch,0,110); fgets(s.ch,110,fp); s.length=strlen(s.ch); k=0; / 初始化開始檢索位置 / while(ks.length1) /* 檢索整個主串s / j=partposition(s,t,k);/ 調用串匹配函數 */ if(j0 ) break; else i+;/* 單詞計數器加1 */ k=j+t.length;/ 繼續下一字串的檢索 / printf(n單詞%s在文本文件%s中共出現%d次n,t.ch,fname,i
18、); / 統計單詞出現的個數 */ void substrint() file *fp; string s,t; / 定義兩個串變量 / char fname10; int i,j,k,l,m; int wz20; /* 存放一行中字串匹配的多個位置 */ printf(”輸入文本文件名:); scanf(s,fname); fp=fopen(fname,”r”); printf(”輸入要檢索的單詞:”); scanf(”s”,t.ch); t.length=strlen(t.ch); l=0; /* 行計數器置0 / while(!feof(fp) /* 掃描整個文本文件 */ memset
19、(s。ch,0,110); fgets(s.ch,110,fp); s.length=strlen(s.ch); l+; /* 行計數器自增1 */ k=0;/ 初始化開始檢索位置 / i=0; /* 初始化單詞計數器 / while(ks.length-1) / 檢索整個主串s */ j=partposition(s,t,k); /* 調用串匹配函數 / if(j0) printf(行號:d,次數:d,位置分別為:”,l,i); for(m=1;m=i;m+) printf(”第4d個字符,wzm+1); printf(n”); printf(”n本軟件自定義110個字節為一行nn”);/* 檢索單詞出現在文本文件中的行號、次數及其位置 /void substrio() void substrcount(),substrint(); char t; while(1) printf(=n); printf(”|文本文件單詞字串的定位統計及定位|n); printf(|=|n”); printf(| a. 單詞出
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品耗材監測管理制度
- 藥品銷售差錯管理制度
- 藥店數據安全管理制度
- 菌種保藏中心管理制度
- 設備人員日常管理制度
- 設備制作車間管理制度
- 設備實施安全管理制度
- 設備日?;A管理制度
- 設備租賃資產管理制度
- 湖南省張家界市永定區2023-2024學年三年級下學期期末考試數學試題
- 2024年湖北省中考歷史真題
- 2024小學六年級人教版道德與法治升學畢業小升初試卷及答案(時政+上下冊考點)04
- 期末考試試卷(試題)-2023-2024學年三年級下冊數學北師大版
- 人教版2024年數學小升初模擬試卷(含答案解析)
- 市場營銷學智慧樹知到期末考試答案章節答案2024年廣東石油化工學院
- 架空送電線路導線及避雷線液壓施工工藝規程
- 森林管護工考試考試題庫(強化練習)
- GB/T 3880.2-2024一般工業用鋁及鋁合金板、帶材第2部分:力學性能
- 藝術中國智慧樹知到期末考試答案2024年
- 2024年中央財政支持社會組織參與社會服務項目資金管理與財務管理指引
評論
0/150
提交評論