数据结构实验报告文本字符计数器Word格式.docx

上传人:b****5 文档编号:20576091 上传时间:2023-01-24 格式:DOCX 页数:18 大小:150.44KB
下载 相关 举报
数据结构实验报告文本字符计数器Word格式.docx_第1页
第1页 / 共18页
数据结构实验报告文本字符计数器Word格式.docx_第2页
第2页 / 共18页
数据结构实验报告文本字符计数器Word格式.docx_第3页
第3页 / 共18页
数据结构实验报告文本字符计数器Word格式.docx_第4页
第4页 / 共18页
数据结构实验报告文本字符计数器Word格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构实验报告文本字符计数器Word格式.docx

《数据结构实验报告文本字符计数器Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告文本字符计数器Word格式.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构实验报告文本字符计数器Word格式.docx

读入一文本行至串变量;

串变量写入文件;

输入是否结束输入标志;

}

关闭文件

给定单词的计数

该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。

匹配一个,计数器加1,直到整个文件扫描结束;

然后输出单词的次数。

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

主控菜单程序的结构

头文件包含

菜单选择包括:

a、建立文件

b、单词计数

c、单词定位

d、退出程序

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

3.模块划分

4.概要设计:

(流程图)

建立文本文件

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

(建立文本文件的思路过程)

给定单词的计数

逐行扫描文本文件。

匹配一个,计数器加1,直到整个文件扫描结束;

然后输出单词的次

(给定单词计数的过程)

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

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

以此,行数加1,单词数清零,直到整个文件扫描结束;

然后输出单词的次数,行号,第几个单词。

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

5.主要函数(算法)说明

朴素模式匹配算法

该算法的基本思想是:

设有三个指针——i,j,k,用i指示主串S每次开始比较的位置;

指针j,k分别指示主串S和模式串T中当前正在等待比较的字符位置;

一开始从主串S的第一个字符(i=0;

j=1)和模式T的第一个字符(k=0)比较,若相等,则继续逐个比较后续字符(j++,k++)。

否则从主串的下一个字符(i++)起再重新和模式串(j=0)的字符开始比较。

依此类推,直到模式T中的所有字符都比较完,而且一直相等,则称匹配成功,并返回位置i;

否则返回-1,表示匹配失败。

顺序串的模式匹配算法如下:

intindex(SStringS,SStringT)

{//求子串T在主串S中首次出现的位置

inti,j,k,m,n;

m=T.length;

//模式串长度赋m

n=S.length;

//目标串长度赋n

for(i=0;

i<

=n-m;

i++)

{

j=0;

k=i;

//目标串起始位置i送入k

while(j<

=m&

&

s.ch[k]==t.ch[j])

{k++;

j++;

}//继续下一个字符的比较

if(j==m)//若相等,则说明找到匹配的子串,返回匹配位置i,

//否则从下一个位置重新开始比较

returni;

}//endfor

return-1;

}//endIndex

给定位置的串匹配算法

该算法要求从串S1(为顺序存储结构)中第k个字符起,求出首次与字符串S2相同的子串的起始位置。

该算法与上面介绍的模式匹配算法类似,只不过上述算法的要求是从主串的第一个字符开始,该算法是上述算法的另一种思路:

从第k个元素开始扫描S1,当其元素值与S2的第一个元素的值相同时,判定它们之后的元素值是否依次相同,直到S2结束为止。

若都相同,则返回当前位置值;

否则继续上述过程,直至S1扫描完为止,其实现算法如下:

IntPartPosition(SStringS1,SStringS2,intk)

{

inti,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++;

//继续使下标移向下一个字符位置}

else

{i=i-j+1;

//使i下标回溯到原位置的下一个位置,使j指向s2的第一个字符,再重新比较}

if(j>

=s2.length)

returni-s2.length;

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

return-1;

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

}//函数结束

说明:

以上两个算法可统一为一个算法,即在子串定位算法Index(S,T)的参数中增加一个起始位置参数即可。

建立文件的实现思路是:

(1)定义一个串变量;

(2)定义文本文件;

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

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

While( 

不是文件输入结束){

读入一文本行至串变量;

串变量写入文件;

输入是否结束输入标志;

}

(5)关闭文件。

该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。

然后输出单词出现的次数。

其实现过程如下:

(1)输入要检索的文本文件名,打开相应的文件;

(2)输入要检索统计的单词;

(3)循环读文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。

具体描述如下:

While(不是文件结束){

读入一行并到串中;

求出串长度;

模式匹配函数计数;

(4)关闭文件,输出统计结果。

这个设计要求与上一个类似,但要相对复杂一些。

其实现过程描述如下:

(3)行计数器置初值0;

(4)while(不是文件结束){

读入一行到指定串中;

行单词计数器置0;

调用模式匹配函数匹配单词定位、该行匹配单词计数;

行号计数器加1;

If(行单词计数器!

=0)

输出行号、该行有匹配单词的个数以及相应的位置;

运行主控程序

主控菜单程序的结构要求内容如下:

(1)头文件包含;

(2)菜单选项包括:

1.建立文件

2.单词计数

3.单词定位

4.退出程序

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

6.详细设计(源代码):

#include<

stdio.h>

string.h>

iostream.h>

#defineMaxStrSize256//根据用户需要自己定义大小

typedefstruct{

charch[MaxStrSize];

//ch是一个可容纳256个字符的字符数组

intlength;

}SString;

//定义顺序串类型

intPartPosition(SStrings1,SStrings2,intk)

{inti,j;

i=k-1;

//扫描s2的开始下标

while(i<

{if(s1.ch[i]==s2.ch[j])

{i++;

j++;

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

}

else

i=i-j+1;

}}

if(j>

returni-s2.length;

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

}//函数结束

voidCreatTextFile()

SStringS;

charfname[10],yn;

FILE*fp;

printf("

输入要建立的文件名:

"

);

scanf("

%s"

fname);

fp=fopen(fname,"

w"

yn='

n'

;

//输入结束标志初值

while(yn=='

||yn=='

N'

请输入一行文本:

gets(S.ch);

S.length=strlen(S.ch);

fwrite(&

S,S.length,1,fp);

fprintf(fp,"

%c"

10);

//是输入换行

结束输入吗?

yorn:

yn=getchar();

fclose(fp);

//关闭文件

建立文件结束!

voidSubStrCount()

SStringS,T;

//定义两个串变量

charfname[10];

inti=0,j,k;

输入文本文件名:

r"

输入要统计计数的单词:

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

k=0;

//初始化开始检索位置

while(k<

S.length-1)//检索整个主串S

j=PartPosition(S,T,k);

//调用串匹配函数

if(j<

0)break;

else{

i++;

//单词计数器加1

k=j+T.length;

//继续下一字串的检索

\n单词%s在文本文件%s中共出现%d次\n"

T.ch,fname,i);

}//统计单词出现的个数

voidSubStrInd()

{FILE*fp;

//定义两个串变量

inti,j,k,l,m;

intwz[20];

//存放一行中字串匹配的多个位置

输入要检索的单词:

l=0;

//行计数器置0

feof(fp)){//扫描整个文本文件

//fread(&

S,sizeof(S),1,fp);

//读入一行文本

fgets(S.ch,256,fp);

l++;

//行计数器自增1

//初始化开始检索位置

i=0;

//初始化单词计数器

//调用串匹配函数

0)break;

wz[i]=j;

//记录匹配单词位置

//继续下一字串检索

if(i>

0){

行号:

%d,次数:

%d,位置分别为:

l,i);

for(m=1;

m<

=i;

m++)printf("

%4d"

wz[m]+1);

\n"

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

intmain()

voidCreatTextFile(),SubStrCount(),SubStrInd();

intxz;

do{

***************madein李媛媛**\n"

printf("

*************************\n"

*文本文件单词的检索与计数*\n"

*1.建立文本文件*\n"

*2.单词字串的计数*\n"

*3.单词字串的定位*\n"

*4.退出整个程序*\n"

************************\n"

请选择(1--4)\n"

%d"

&

xz);

switch(xz){

case1:

CreatTextFile();

break;

case2:

SubStrCount();

case3:

SubStrInd();

case4:

return0;

default:

printf("

选择错误,重新选\n"

}while

(1);

7.调试分析:

Ps:

功能1,建立文本文件

功能2,单词字串的计数

功能3,单词字串的检索

功能4,退出整个程序

8.课程设计总结:

“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。

刚拿到任务书的时候脑子里一片茫然,不知道如何下手,但经过两周的努力,终于完成了。

其实无论做什么事情,只要用心就一定会有收获,绝不能轻言放弃。

以前用编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。

现在编程感觉完全不同了。

在编写一个程序之前,先对这个课程设计进行了一下分析,将每个要求都花了一下算法流程图,使得自己的思路更加的清晰了。

然后进行编程,不断的在电脑上调试程序,终于完成了此次的课程设计。

另外,这次的课程设计让我深刻理解数据结构了的重要性。

只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构,了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。

过而能改,善莫大焉。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课程设计终于顺利完成了,在设计中虽然遇到了很多问题,但是在老师同学的帮助下和自己在不断地查阅书籍资料,终于使困难得以迎刃而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

通过这次课程设计,逐渐提高了我的程序设计和调试能力,我以前对算法一直很害怕,总是看不明白究竟这程序中间的过程是怎么进行的。

在这次实验中我终于克服了这一障碍,一遍遍在心中自己默默的走,终于弄明白了,另外,从此次课程设计,我学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,与人合作共同提高,这些都让我受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

功夫不负有心人!

不过这次试验也让我看到了自己的不足,在程序设计过程中我还有关于C语言的一些比较具体的东西还不太懂,需要进一步了解。

毕竟学如逆水行舟,不进则退,只有不断充实自己才会不断进步。

这次试验还让我意识到只有不断的在电脑上调试程序,自己的水平才能得到提高,纸上谈兵终觉浅~

最后,我要感谢在我课设过程中不断帮助我并给我鼓励的同学和老师们,是你们的帮助让我让更自信并不断努力,我一定会更加努力学习并不断充实自己~

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1