文本文件單詞的檢索與計(jì)數(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁
文本文件單詞的檢索與計(jì)數(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁
文本文件單詞的檢索與計(jì)數(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁
文本文件單詞的檢索與計(jì)數(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁
文本文件單詞的檢索與計(jì)數(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選文檔文件檢索1需求分析11 建立文本文件 建立文本文件的實(shí)現(xiàn)思路 (1) 定義一個(gè)串變量 (2) 定義文本文件 (3) 輸入文件名,打開該文件 (4) 循環(huán)讀入文本行,寫入文本文件,其過程如下: While(不是文件輸入結(jié)束) 讀入一文本行至串變量; 串變量寫入文件; 輸入是否結(jié)束輸入標(biāo)志; (5) 關(guān)閉文件 1.2給定單詞的計(jì)數(shù) 該功能需要用到前一節(jié)中設(shè)計(jì)的模式匹配算法,逐行掃描文本文件。匹配一個(gè),計(jì)數(shù)器加1,直到整個(gè)文件掃描結(jié)束;然后輸出單詞的次數(shù)。 1.3 檢索單詞出現(xiàn)在文本文件中的行號(hào)、次數(shù)及其位置 1.4 主控菜單程序的結(jié)構(gòu) (1) 頭文件包含 (2) 菜單選擇包括: 1、 建立

2、文件 2、 單詞計(jì)數(shù) 3、 單詞定位 4、 退出程序 (3)選擇14執(zhí)行相應(yīng)的操作,其他字符為非法1 共0條評(píng)論.2概要設(shè)計(jì)2.流程圖21建立文本文件定義一個(gè)串變量 ,定義文本文件, 輸入文件名,打開該文件 , 循環(huán)讀入文本行,寫入文本文件, 關(guān)閉文件 。建立文本文件的思路過程22給定單詞的計(jì)數(shù)逐行掃描文本文件。匹配一個(gè),計(jì)數(shù)器加1,直到整個(gè)文件掃描結(jié)束;然后輸出單詞的次數(shù)。 給定單詞計(jì)數(shù)的過程23檢索單詞出現(xiàn)在文本文件中的行號(hào)、次數(shù)及其位置 逐行掃描文本文件。掃描一個(gè)單詞,單詞數(shù)加1,匹配一個(gè),計(jì)數(shù)器加1,輸出該單詞數(shù),行數(shù)到底以此,行數(shù)加1,單詞數(shù)清零,直到整個(gè)文件掃描結(jié)束;然后輸出單詞的

3、次數(shù),行號(hào),第幾個(gè)單詞。檢索單詞的出現(xiàn)在文本文件中的行號(hào),次數(shù)以及位置3詳細(xì)設(shè)計(jì)主代碼#include<stdio.h>#include<string.h>#define MaxStrSize 256 /根據(jù)用戶需要自己定義大小typedef structchar chMaxStrSize; /ch是一個(gè)可容納256個(gè)字符的字符數(shù)組int length;SString; /定義順序串類型int PartPosition(SString s1, SString s2, int k)int i, j;i=k-1; /掃描s1的下標(biāo),因?yàn)閏中數(shù)組下標(biāo)是從0開始,串中序號(hào)相差1

4、j=0; /掃描s2的開始下標(biāo)while (i<s1.length&&j<s2.length)if(s1.chi=s2.chj)i+;j+; /繼續(xù)使下標(biāo)移向下一個(gè)字符位置elsei=i-j+1;j=0;if(j>=s2.length)return i-s2.length;else return -1; /表示s1中不存在s2,返回-1 /表示s1中不存在s2,返回其起始位置 /函數(shù)結(jié)束void CreatTextFile()SString S;char fname10, yn;FILE *fp;printf("輸入要建立的文件名: ");

5、scanf("%s", fname);fp=fopen(fname,"w");yn='n' /輸入結(jié)束標(biāo)志初值while(yn='n'|yn='N')printf("請輸入一行文本:");gets(S.ch);gets(S.ch);S.length=strlen(S.ch);fwrite(&S, S.length, 1, fp);fprintf(fp,"%c", 10); /是輸入換行printf("結(jié)束輸入嗎?y or n: ");yn=

6、getchar();fclose(fp); /關(guān)閉文件printf("建立文件結(jié)束!");void SubStrCount()FILE *fp;SString S,T; /定義兩個(gè)串變量char fname10;int i=0,j,k;printf("輸入文本文件名: ");scanf("%s", fname);fp=fopen(fname ,"r");printf("輸入要統(tǒng)計(jì)技術(shù)的單詞:");scanf("%s", T.ch);T.length=strlen(T.ch);

7、while(!feof(fp)/掃描整個(gè)文件文本/fread(&S.ch,1,sizeof(S),fp); /讀入一行文本memset(S.ch,'0', 256);fgets(S.ch,100,fp);S.length=strlen(S.ch);k=0; /初始化開始檢索位置while(k<S.length-1) /檢索整個(gè)主串Sj=PartPosition(S,T,k);if(j<0)break;elsei+; /單詞計(jì)數(shù)器加1k=j+T.length; /繼續(xù)下一字串的檢索printf("n單詞%s在文本文件%s中共出現(xiàn)%d次n",

8、 T.ch, fname,i); /統(tǒng)計(jì)單詞出現(xiàn)個(gè)數(shù)void SubStrInd()FILE *fp;SString S,T; /定義兩個(gè)串變量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; while(!feof(fp)/fre

9、ad(&S, sizeof(S), 1, fp);/讀入一行文本memset(S.ch,'0', 256);fgets(S.ch,256,fp);S.length=strlen(S.ch);l+;k=0;i=0;while(k<S.length-1)j=PartPosition(S,T,k);if(j<0)break;elsei+;wzi=j;k=j+T.length;if(i>0)printf("行號(hào):%d , 次數(shù):%d, 位置分別為:",l, i);for(m=1;m<=i;m+) printf("%4d&qu

10、ot;, wzm+1); printf("n");int main()void CreatTextFlie(), SubStrInd();int xz;doprintf("*n");printf("*文本文件的檢索、字符串的統(tǒng)計(jì)及定位*n");printf("*n");printf("* 1.建立文本文件 *n");printf("* 2.單詞字符串的計(jì)數(shù) *n");printf("* 3.單詞字符串的定位 *n");printf("* 4.退出

11、程序 *n");printf("*n");printf(" 請選擇(14) n");scanf("%d", &xz);switch(xz)case 1:CreatTextFile(); break;case 2:SubStrCount(); break;case 3:SubStrInd(); break;case 4:return 0;default: printf("選擇錯(cuò)誤,重新選n");while(1);4調(diào)試分析4.1未輸入文件前的頁面4.2輸入文本文件,計(jì)數(shù)單詞出現(xiàn)的次數(shù) 4.3檢索某單

12、詞的行號(hào),出現(xiàn)次數(shù),以及位置5課程總結(jié)經(jīng)過一周的奮斗,這次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)終于做完了。通過這次設(shè)計(jì)我們也著實(shí)又感受了一次編程的樂趣,從中也學(xué)到了不少知識(shí)。感受最深的一點(diǎn)是:以前用編程,只是注重如何編寫函數(shù)能夠完成所需要的功能,似乎沒有明確的戰(zhàn)術(shù),只是憑單純的意識(shí)和簡單的語句來堆砌出一段程序。現(xiàn)在編程感覺完全不同了。在編寫一個(gè)程序之前,先對(duì)這個(gè)課程設(shè)計(jì)進(jìn)行了一下分析,將每個(gè)要求都花了一下算法流程圖,使得自己的思路更加的清晰了 。 然后進(jìn)行編程,不斷的在電腦上調(diào)試程序,終于完成了此次的課程設(shè)計(jì)。另外,我還體會(huì)到深刻理解數(shù)據(jù)結(jié)構(gòu)的重要性。只有真正理解這樣定義數(shù)據(jù)類型的好處,才能用好這樣一種數(shù)據(jù)結(jié)構(gòu)。了解典型數(shù)據(jù)結(jié)構(gòu)的性質(zhì)是非常有用的,它往往是編寫程序的關(guān)鍵。通過這次課程設(shè)計(jì)逐漸提高了自己的程序設(shè)計(jì)和調(diào)試能力,我以前對(duì)算法一直很害怕,總是看不明白究竟這程序中間的過程是怎么進(jìn)行的。在這次實(shí)驗(yàn)中我終于克服了這一障礙,一遍遍在心中自己默默

溫馨提示

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

評(píng)論

0/150

提交評(píng)論