(完整word版)文本文件单词的检索与计数课程设计实验报告

(完整word版)文本文件单词的检索与计数课程设计实验报告


2024年1月5日发(作者:)

文件检索

1需求分析

1.1 建立文本文件

建立文本文件的实现思路

(1) 定义一个串变量

(2) 定义文本文件

(3) 输入文件名,打开该文件

(4) 循环读入文本行,写入文本文件,其过程如下:

While(不是文件输入结束){

读入一文本行至串变量;

串变量写入文件;

输入是否结束输入标志;

}

(5) 关闭文件

1.2给定单词的计数

该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。

1.3 检索单词出现在文本文件中的行号、次数及其位置

1.4 主控菜单程序的结构

(1) 头文件包含

(2) 菜单选择包括:

1、 建立文件

2、 单词计数

3、 单词定位

4、 退出程序

(3)选择1~4执行相应的操作,其他字符为非法

2.概要设计

2.流程图

2.1建立文本文件

定义一个串变量 ,定义文本文件, 输入文件名,打开该文件 , 循环读入文本行,写入文本文件, 关闭文件 。

定义一个串变量

定义文本文件

输入文件名,打开该文件

循环读入文本行,写入文本文件While是文本文件

YN读入一文本行至串变量串变量写入文件文件输入结束关闭文件

建立文本文件的思路过程

2.2给定单词的计数

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

给定一个单词定义N=1,S=0一共给了M个单词扫描第N个单词NIf第N个单词与所给单词相同YS=S+1N=N+1YIf N<=MN输出S及为单词的计数结束

给定单词计数的过程

2.3检索单词出现在文本文件中的行号、次数及其位置

逐行扫描文本文件。扫描一个单词,单词数加1,匹配一个,计数器加1,输出该单词数,行数到底

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

输入文本文件名假设一共X行每行Y个单词输入要检索的单词定义L=1,I=0,N=1L为行数I为次数N为第几个单词扫描第L行第N个单词If第N个单词与Y所给单词相同N输出NI=I+1N=N+1YIf N<=XN输出L输出IN=1I=0L=L+1If L<=YNY结束

检索单词的出现在文本文件中的行号,次数以及位置

3详细设计

主代码

#include

#include

#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<&&j<)

{

if([i]==[j])

{

i++;

j++; //继续使下标移向下一个字符位置

}

else

{

i=i-j+1;

j=0;

}

}

if(j>=)

return ;

else

return -1; //表示s1中不存在s2,返回-1

//表示s1中不存在s2,返回其起始位置

} //函数结束

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();gets();

=strlen();

fwrite(&S, , 1, fp);

fprintf(fp,"%c", 10); //是输入换行

printf("结束输入吗?y or n: ");

yn=getchar();

}

fclose(fp); //关闭文件

printf("建立文件结束!");

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", );

=strlen();

while(!feof(fp))

{ //扫描整个文件文本

//fread(&,1,sizeof(S),fp); //读入一行文本

memset(,'0', 256);

fgets(,100,fp);

=strlen();

k=0; //初始化开始检索位置

while(k<-1) //检索整个主串S

{

j=PartPosition(S,T,k);

if(j<0)

break;

else

{

i++; //单词计数器加1

k=j+; //继续下一字串的检索

}

}

}printf("n单词%s在文本文件%s中共出现%d次n", , 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", );

=strlen();

l=0;

while(!feof(fp))

{

//fread(&S, sizeof(S), 1, fp);//读入一行文本

memset(,'0', 256);

fgets(,256,fp);

=strlen();

l++;

k=0;

i=0;

while(k<-1)

{

j=PartPosition(S,T,k);

if(j<0)

break;

else

{

i++;

wz[i]=j;

k=j+;

}

}

if(i>0)

{

printf("行号:%d , 次数:%d, 位置分别为:",l, i);

for(m=1;m<=i;m++)

printf("%4d", wz[m]+1);

printf("n");

}

}

}

int main()

{

void CreatTextFlie(), 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");

}

}while(1);

}

4调试分析

4.1未输入文件前的页面

4.2输入文本文件,计数单词出现的次数

4.3检索某单词的行号,出现次数,以及位置

5课程总结

经过一周的奋斗,这次数据结构的课程设计终于做完了。通过这次设计我们也着实又感受了一次编程的乐趣,从中也学到了不少知识。

感受最深的一点是:以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。现在编程感觉完全不同了。在编写一个程序之前,先对这个课程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了 。 然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。

另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。

通过这次课程设计逐渐提高了自己的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。在这次实验中我终于克服了这一障碍,一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊!

这次试验也让我看到了自己的不足,还是不太用模板类。还有许多关于C语言的一些比较具体的东西还不太懂,需要进一步了解。这次试验还让我意识到只


发布者:admin,转转请注明出处:http://www.yc00.com/news/1704407184a1348821.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信