實驗四:文本編輯_第1頁
實驗四:文本編輯_第2頁
實驗四:文本編輯_第3頁
實驗四:文本編輯_第4頁
實驗四:文本編輯_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、實驗四:文本編輯一 問題描述要求建立一個文本文件,每個單詞子串不包含空格且不跨行,單詞子串由字符序列構成,且區分大小寫;統計給定單詞子串在文本文件中出現的總次數;檢索輸出某個單詞子串出現在文本中的行號、在該行中出現的次數以及位置。二 輸入與輸出輸入:從鍵盤循環輸入字符串,創建到文本文件中從鍵盤輸入要計數的單詞子串以及要定位的單詞子串輸出:將統計結果以及定位的結果輸出到屏幕三 需求分析1.定義字符串的存儲結構;2.編寫主函數、菜單函數,確定函數之間的接口;3.編寫創建文件函數、單詞匹配函數、單詞計數函數、單詞定位函數。使用多套數據,進行系統調試;四 開發工具與環境硬件設備:微型計算機系統軟件環境

2、:操作系統Windows,開發工具devc+五 概要設計1. 數據結構定義 #define maxsize 10000typedef unsigned char sstringmaxsize;2. 各函數模塊void wordcount();/操作結果:出現的總次數void creattextfile();/統計單詞,操作結果:創建文本文件int choose( );/操作結果:輸入選項int index_BF(sstring s,sstring t,int pos);/操作結果:串匹配,返回匹配的位置void strfind();/操作結果:定位單詞出現在某行,某列以及次數六 詳細設計#in

3、clude<bits/stdc+.h> /萬能頭文件 using namespace std;#define maxsize 10000 typedef char sstringmaxsize; /字符串數組 void wordcount(); /單詞統計函數 void creattextfile(); /創建文件函數 int choose( );int index_BF(sstring s,sstring t,int pos); /匹配函數 void strfind(); /單詞定位函數 int main() int choice=0; /選擇鍵/選擇框 printf("

4、;-n");printf("1.文本文件的建立n");printf("2.單詞的計數n");printf("3.單詞的定位n");printf("4.退出n");printf("-n");while(1)/調用選擇函數來獲取選擇數字 choice=choose();switch(choice) case 1: creattextfile();break;case 2: wordcount();break; case 3: strfind();break; case 4: return

5、0; return 0; /選擇功能所對應的數字 int choose( ) int choice; printf("輸入選擇:n");scanf("%d",&choice);return choice;void creattextfile() /文件名filename yn表示是否繼續輸入 char filename20,yn='n'/字符串數組str sstring str; /文件類型指針 fp FILE *fp; printf("請輸入文件名:n"); scanf("%s",file

6、name);getchar();/"w"表示以寫模式打開文件,如果fp=NULL表示打開文件失敗 if(fp=fopen(filename,"w")=NULL)printf("cannot openn");exit(0);/yn='n'表示繼續輸入 while(yn='n') printf("請輸入一行字符串:n"); gets(str ); /輸入字符串 fputs(str,fp); /將字符串寫入文件fp fputc('n',fp); /行末寫換行符 printf

7、("是否結束輸入?y or n:n");scanf("%c",&yn);getchar(); fclose(fp); /關閉文件 printf("文件建立結束n"); /計數函數 void wordcount( ) FILE *fp; sstring s,t; char filename10;int count=0,j,k,lent; printf("請輸入要打開的文件名:n ");scanf("%s",filename);if(fp=fopen(filename,"r&quo

8、t;)=NULL) /打開文件成功 printf("cannot openn");exit(0);printf("請輸入需要統計出現次數的單詞子串:n");scanf("%s",t);/feof表示文件的結束,循環讀入文件每一行count=0; /count初始化while(!feof(fp) strcpy(s,"");fgets(s,1000,fp); k=0; /k初始化while(k< strlen(s)-1) j=index_BF(s,t,k);if(j>=0)count+;k+; printf

9、("出現了%d次n",count); /串匹配函數 int index_BF(sstring s,sstring t,int pos) int i,j,m,n; m=strlen(s); /m表示s的串長度 n=strlen(t); /n表示t的串長度 if(pos<0 | pos+n >m ) /這種情況不可能匹配,pos非負,pos+n一定小于總長m return(-1); i=pos;j=0; while(i<m&&j<n)if(si=t j) i+; j+; /當前字符相同,i、j下標同時后移動 else i=i-j+1; j

10、=0; /當前字符不匹配,i,j重新歸位 if(j>=n) /表示n個字符全部匹配 return(i-n); else /表示沒有完全匹配 return(-1); /串定位函數 void strfind() FILE *fp; /文件指針fp sstring s,t; char filename10; int i=0,j,k,lent,pos50,line=0,m; /局部變量定義區 printf("請輸入要打開的文件名:n" );scanf("%s",filename);if(fp=fopen(filename,"r")=NU

11、LL) /打開文件成功 printf("cannot openn");exit(0);printf("請輸入要定位的單詞子串:n");scanf("%s",t);lent =strlen(t); /字符串t的長度 while(!feof(fp) /循環讀入 strcpy(s,"");fgets(s,1000,fp); /從fp文件中讀入一行數據 line+; /行計數器累加,行數 k=0; i=0; /k,i初始化while(k< strlen(s)-1) /逐個匹配,直到最后一個字符 j=index_BF(

12、s,t,k); /調用定位函數 if(j<0) /不匹配,下一個 k+; else /匹配,個數i加1,將位置j存入pos數組,k調到該字符串之后的字符 i+; posi=j; k=j+lent ; if(i>0) printf("在第%d行,出現了%d次,位置分別是:",line,i);for(m=1;m<=i;m+) /輸出位置信息printf("%4d列",posm);printf("n"); 七 運行結果八 實驗總結主要是學習并使用了對操作文件的函數和字符串匹配函數。1.FILE *fp = NULL; fp = fopen(filename,&

溫馨提示

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

評論

0/150

提交評論