文本文件单词的检索与计数.doc_第1页
文本文件单词的检索与计数.doc_第2页
文本文件单词的检索与计数.doc_第3页
文本文件单词的检索与计数.doc_第4页
文本文件单词的检索与计数.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1需求分析11 建立文本文件 建立文本文件的实现思路 (1) 定义一个串变量 (2) 定义文本文件 (3) 输入文件名,打开该文件 (4) 循环读入文本行,写入文本文件,其过程如下: While(不是文件输入结束) 读入一文本行至串变量; 串变量写入文件; 输入是否结束输入标志; (5) 关闭文件 1.2给定单词的计数 该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。 1.3 检索单词出现在文本文件中的行号、次数及其位置 1.4 主控菜单程序的结构 (1) 头文件包含 (2) 菜单选择包括: 1、 建立文件 2、 单词

2、计数 3、 单词定位 4、 退出程序 (3)选择14执行相应的操作,其他字符为非法1 共0条评论.2概要设计2.流程图21建立文本文件定义一个串变量 ,定义文本文件, 输入文件名,打开该文件 , 循环读入文本行,写入文本文件, 关闭文件 。建立文本文件的思路过程22给定单词的计数逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。 给定单词计数的过程23检索单词出现在文本文件中的行号、次数及其位置 逐行扫描文本文件。扫描一个单词,单词数加1,匹配一个,计数器加1,输出该单词数,行数到底以此,行数加1,单词数清零,直到整个文件扫描结束;然后输出单词的次数,行号,第几

3、个单词。检索单词的出现在文本文件中的行号,次数以及位置3详细设计主代码#include<stdafx.h>#include<stdio.h>#include<string.h>#define MaxStrSize 256 /根据用户需要自己定义大小typedef struct           char chMaxStrSize; /ch是一个可容纳256个字符的字符数组        &

4、#160; int length; SString;/定义顺序串类型int PartPosition (SString s1,SString s2,int k)    int i,j;      i=k-1;     /扫描s1的下标,因为c中数组下标是从0开始,串中序号相差1    j=0;/扫描s2的开始下标    while(i<s1.length && j<s2.length)&#

5、160;  if(s1.chi=s2.chj)        i+;j+; /继续使下标移向下一个字符位置           else                 i=i-j+1; j=0;       

6、    if (j>=s2.length)      return i-s2.length;   else      return -1;/表示s1中不存在s2,返回-1      /表示s1中存在s2,返回其起始位置   /函数结束  void CreatTextFile()        

7、        SString S;          char fname10,yn;          FILE *fp;         printf("输入要建立的文件名:");     &#

8、160;   scanf("%s",fname);         fp=fopen(fname,"w");         yn='n'/输入结束标志初值             while(yn='n'|yn=&#

9、39;N')                                       printf("请输入一行文本:");gets(S.ch);gets(S.ch); 

10、0;                       S.length=strlen(S.ch);                        

11、; fwrite(&S,S.length,1,fp);                          fprintf(fp,"%c",10);/是输入换行             

12、0;           printf("结束输入吗?y or n :");yn=getchar();                           fclose(fp);/关闭文件   

13、60;      printf("建立文件结束!");       void SubStrCount()                      FILE *fp;         

14、60;   SString S,T;/定义两个串变量            char fname10;            int i=0,j,k;            printf("输入文本文件名:"); 

15、60;          scanf("%s",fname);            fp=fopen(fname,"r");            printf("输入要统计计数的单词:");   

16、         scanf(“%s”,T.ch);            T.length=strlen(T.ch);            while(!feof(fp)   /扫描整个文本文件       

17、;          / fread(&S.ch,1,sizeof(S),fp);/读入一行文本       memset(S.ch,'0',256);       fgets(S.ch,100,fp);          S.length=strlen(S.ch); 

18、60;                  k=0; /初始化开始检索位置                    while(k<S.length-1) /检索整个主串S    

19、;                                          j=PartPosition(S,T,k);/调用串匹配函数    

20、60;                  if(j<0 ) break;                       else       &#

21、160;                       i+;/单词计数器加1                         &#

22、160;    k=j+T.length;/继续下一字串的检索                                           &

23、#160;                            printf("n单词%s在文本文件%s中共出现%d次n",T.ch,fname,i);    /统计单词出现的个数void SubStrInd()        

24、  FILE *fp;           SString S,T; /定义两个串变量          char fname10;          int i,j,k,l,m;           int

25、wz20; /存放一行中字串匹配的多个位置          printf("输入文本文件名:");           scanf("%s",fname);          fp=fopen(fname,"r");   

26、60;      printf("输入要检索的单词:");           scanf("%s",T.ch);          T.length=strlen(T.ch);          l=0; /行计数器置0

27、0;         while(!feof(fp) /扫描整个文本文件          /fread(&S,sizeof(S),1,fp);   /读入一行文本     memset(S.ch,'0',256);           fget

28、s(S.ch,256,fp);      S.length=strlen(S.ch);     l+; /行计数器自增1          k=0;/初始化开始检索位置          i=0; /初始化单词计数器         while(k&

29、lt;S.length-1) /检索整个主串S                                j=PartPosition(S,T,k); /调用串匹配函数          

30、0;        if(j<0) break;                   else                     

31、0;    i+;/单词计数器加1                         wzi=j;/记录匹配单词位置                  

32、       k=j+T.length;/继续下一字串检索                                        if(i>0) 

33、                  printf("行号:%d,次数:%d,位置分别为:",l,i);                   for(m=1;m<=i;m+) printf("%4d",wz

34、m+1); printf("n");                          /检索单词出现在文本文件中的行号、次数及其位置   int main()              void C

35、reatTextFile(),SubStrCount(),SubStrInd();         int xz;         do            printf("* * * * * * * * * * * * * * * * * * * * * * * * *n");

36、0;          printf("*文本文件的检索、字串的统计及定位             *n");           printf("* * * * * * * * * * * * * * * * * * * * * * * * *n&

37、quot;);  printf("*       1.  建立文本文件                     *n");           printf("* 

38、60;     2. 单词字串的计数                    *n");           printf("*       3. 单词字串的定位

39、                    *n");           printf("*       4. 退出整个程序      

40、60;               *n");           printf("* * * * * * * * * * * * * * * * * * * * * * * * n");           

41、          printf("                      请选择(1-4)            ");   

42、;        scanf("%d",&xz);           switch(xz)                          

43、;    case 1 : CreatTextFile();break;                             case 2 : SubStrCount();break;           

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论