当前位置:文档之家› 文本文件资料单词的检索 大数据结构

文本文件资料单词的检索 大数据结构

滁州学院课程设计报告课程名称:数据结构设计题目:文本文件单词的检索系别:网络与通信工程系专业:网络工程组别:起止日期:2012 年6月14 日~ 2012 年6月21日指导教师:计算机与信息工程学院二○一二年制目录1 引言 (3)2 分析 (3)2.1建立文本文件建立文本文件的实现思路 (3)2.2给定单词的计数 (3)2.3检索单词出现在文本文件中的行号、次数及其位置 (3)2.4主控菜单程序的结构 (3)3 详细分析 (3)3.1流程图 (3)3.1.1建立文本文件 (3)3.1.2给定单词的计数 (4)3.2程序的实现 (6)3,2.1预编命令,定义结构体和全局变量 (7)3.2.2建立文本文件 (7)3.2.3检索某单词的行号,出现次数,以及位置 (8)3.2.4菜单函数 (9)3.2.4退出整个程序 (10)3.2.5主体函数 (10)4 调试与操作说明 (10)4.1开始界面如图4-1所示 (11)4.2输入文本文件,计数单词出现的次数。

如图4-2所示 (11)4.3检索某单词的行号,出现次数,以及位置。

如图4-3,4-4所示 (11)5 总结讨论 (12)6 致谢 (13)7 参考文献 (13)1 引言本程序主要围绕的是文本文件单词的检索与计数,正文包括:对文本文件单词的检索与计数程序的详细要求,对程序的分析,勾画程序思路及内容的流程图,主程序代码,程序运行后相对应要求的所有截图,还有我们做完程序后的总结讨论,以及我们在本次程序中的详细分工。

2 分析2.1 建立文本文件建立文本文件的实现思路(1)定义一个串变量(2)定义文本文件(3)输入文件名,打开该文件(4)循环读入文本行,写入文本文件,其过程如下:While(不是文件输入结束){读入一文本行至串变量;串变量写入文件;输入是否结束输入标志;}(5)关闭文件2.2给定单词的计数该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。

匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。

2.3 检索单词出现在文本文件中的行号、次数及其位置2.4 主控菜单程序的结构(1)头文件包含(2)菜单选择包括:1、建立文件2、单词计数3、单词定位4、退出程序(3)选择1~4执行相应的操作,其他字符为非法3 详细分析3.1流程图3.1.1建立文本文件定义一个串变量,定义文本文件,输入文件名,打开该文件,循环读入文本行,写入文件。

如图3-1所示图3-1 建立文本基本流程图建立文本文件的思路过程3.1.2给定单词的计数逐行扫描文本文件。

匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。

如图3-2所示图3-2 单词计数流程图给定单词计数的过程逐行扫描文本文件。

扫描一个单词,单词数加1,匹配一个,计数器加1,输出该单词数,行数到底以此,行数加1,单词数清零,直到整个文件扫描结束;然后输出单词的次数,行号,第几个单词。

如图3-3所示如3-3 检索单词行号、次数和位置流程图检索单词的出现在文本文件中的行号,次数以及位置3.2程序的实现3,2.1预编命令,定义结构体和全局变量/////////////////////////////////////////////////////////////////////////////// ///// 文本文件单词的检索系统//////////////////////////// //////////////////////////////////////////////////////////////////////////////#include<stdio.h>#include<string.h>#define MaxStrSize 256 /* 根据用户需要自己定义大小*/typedef struct {char ch[MaxStrSize]; /* ch是一个可容纳256个字符的字符数组*/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){if(s1.ch[i]==s2.ch[j]){ i++;j++; /* 继续使下标移向下一个字符位置*/}else{i=i-j+1; j=0;} }if (j>=s2.length)return i-s2.length;elsereturn -1;/* 表示s1中不存在s2,返回-1 *//* 表示s1中存在s2,返回其起始位置*/} /* 函数结束*/3.2.2建立文本文件/////////////////////////////////////////////////////////////////////*件一个文本文件,在里面输入想要的文本*/void CreatTextFile(){SString S;char fname[10],yn;FILE *fp;printf("输入要建立的文件名:");scanf("%s",fname);fp=fopen(fname,"w");yn='n';/* 输入结束标志初值*/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("结束输入吗?y or n :");yn=getchar();}fclose(fp);/* 关闭文件*/printf("建立文件结束!\n");}3.2.3检索某单词的行号,出现次数,以及位置//////////////////////////////////////////////////////////////////////// /*输入2进行计算出现次数,输入3可以确定文本出现的位置,以此实现检索单词的出现在文本文件中的行号,次数以及位置*/void SubStrCount(){FILE *fp;SString S,T;/* 定义两个串变量*/char fname[10];int i=0,j,k;printf("输入文本文件名:");scanf("%s",fname);fp=fopen(fname,"r");printf("输入要统计计数的单词:");scanf("%s",T.ch);T.length=strlen(T.ch);while(!feof(fp)){ /* 扫描整个文本文件*//* 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) /* 检索整个主串S */{j=PartPosition(S,T,k);/* 调用串匹配函数*/if(j<0 ) break;else {i++;/* 单词计数器加1 */k=j+T.length;/* 继续下一字串的检索*/}}}printf("\n单词%s在文本文件%s中共出现%d次\n",T.ch,fname,i);}/* 统计单词出现的个数*/void SubStrInd(){ FILE *fp;SString S,T; /* 定义两个串变量*/char fname[10];int i,j,k,l,m;int wz[20]; /* 存放一行中字串匹配的多个位置*/printf("输入文本文件名:");scanf("%s",fname);fp=fopen(fname,"r");printf("输入要检索的单词:");scanf("%s",T.ch);T.length=strlen(T.ch);l=0; /* 行计数器置0 */while(!feof(fp)) { /* 扫描整个文本文件*//* fread(&S,sizeof(S),1,fp); //读入一行文本*/memset(S.ch,'\0',256);fgets(S.ch,256,fp);S.length=strlen(S.ch);l++; /* 行计数器自增1 */k=0;/* 初始化开始检索位置*/i=0; /* 初始化单词计数器*/while(k<S.length-1) /* 检索整个主串S */{j=PartPosition(S,T,k); /* 调用串匹配函数*/if(j<0) break;else {i++;/* 单词计数器加1 */wz[i]=j;/* 记录匹配单词位置*/k=j+T.length;/* 继续下一字串检索*/}}if(i>0){printf("行号:%d,次数:%d,位置分别为:",l,i);for(m=1;m<=i;m++) printf("%4d",wz[m]+1); printf("\n");}}}/* 检索单词出现在文本文件中的行号、次数及其位置*/3.2.4菜单函数////////////////////////////////////////////////////////////////////////////////*编写菜单函数,以便使用者方便运行使用。

按1建立文本文件,按2进行单词字符串的计数,按3进行单词字符串的定位,按4退出程序程序*/void CreatTextFile(),SubStrCount(),SubStrInd();int xz;do {printf("===============================================\n");printf("|| 文本文件的检索、字串的统计及定位||\n");printf("||=========================================== ||\n");printf("|| 1. 建立文本文件||\n");printf("|| 2. 单词字串的计数||\n");printf("|| 3. 单词字串的定位||\n");printf("|| 4. 退出整个程序||\n");printf("===============================================\n");printf(" 请选择(1--4)\n ");scanf("%d",&xz);switch(xz) {case 1 : CreatTextFile();break;case 2 : SubStrCount();break;case 3 : SubStrInd();break;case 4 : return 0;default:printf("选择错误,重新选\n");}}3.2.4退出整个程序////////////////////////////////////////////////////////////////////// /*用此函数来退出文本文件的单词检索*/void end(){printf("谢谢使用文本文件的单词检索!\n");exit(0);}3.2.5主体函数////////////////////////////////////////////////////////////////////////////////*主函数,利用无限循环可以进行连续的操作*/int main(){ while(1);{CreatTextFile(),SubStrCount(),SubStrInd();}}4 调试与操作说明4.1开始界面如图4-1所示图4-1 文本文件开始界面我们可以看到共有四个选项,从1到4依次完成建立文本文件,到单词字串计数,再到单词字串的定位,最后退出!4.2输入文本文件,计数单词出现的次数。

相关主题