C语言算法查找字符串在文中出现的次数Word格式文档下载.docx

上传人:b****4 文档编号:17002772 上传时间:2022-11-27 格式:DOCX 页数:11 大小:111.33KB
下载 相关 举报
C语言算法查找字符串在文中出现的次数Word格式文档下载.docx_第1页
第1页 / 共11页
C语言算法查找字符串在文中出现的次数Word格式文档下载.docx_第2页
第2页 / 共11页
C语言算法查找字符串在文中出现的次数Word格式文档下载.docx_第3页
第3页 / 共11页
C语言算法查找字符串在文中出现的次数Word格式文档下载.docx_第4页
第4页 / 共11页
C语言算法查找字符串在文中出现的次数Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C语言算法查找字符串在文中出现的次数Word格式文档下载.docx

《C语言算法查找字符串在文中出现的次数Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言算法查找字符串在文中出现的次数Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

C语言算法查找字符串在文中出现的次数Word格式文档下载.docx

3.输入一个,检索并输出在文本中出现的行号和该行中的相应位置

三.数据结构

1.子函数设计:

(1).voidget_next(SStringT,intnext[]) 

//求next值

(2).intIndex(SStringS,SStringT,intpos)//KMP算法

(3).voidfind(charname[],SStringkeys)//查找函数

2.主函数调用设计:

intmain()//主函数

3.结构设计:

#defineMAXSTRLEN255 

//最大串长

typedefcharSString[MAXSTRLEN+1];

//串的定长顺序存储表示

intnext[MAXSTRLEN]//KMP算法中用到的next

四.算法设计思想及流程图

主函数设计:

intmain()

{

charname[50];

//存储输入的小说路径字符串

SStringwords[10];

//定义字符串数组,用于存储输入的关键字

intn,i;

printf("

Pleaseinputthenameofthenovel:

\n"

);

scanf("

%s"

name);

Howmanywordsdoyouwanttofind?

(n<

10)\n"

%d"

&

n);

Pleaseinputthewordsyouwanttofind:

for(i=0;

i<

n;

i++)

scanf("

words[i][1]);

//用户一次性输入要查找的关键字,words[i][0]用于存放字符串的长度

find(name,words[i]);

//对于每一个关键字,调用查找函数进行查找统计

}

子函数设计:

//求next值

voidget_next(SStringT,intnext[])//求next值

intj=1,k=0;

next[1]=0;

while(j<

T[0])

if(k==0||T[k]==T[j])

{

++j;

++k;

if(T[j]!

=T[k])next[j]=k;

elsenext[j]=next[k];

}

elsek=next[k];

//KMP算法

intIndex(SStringS,SStringT,intpos)//KMP算法

inti=pos,j=1;

while(i<

=S[0]&

&

j<

=T[0])

if(j==0||S[i]==T[j]){++i;

++j;

else

j=next[j];

if(j>

T[0])return(i-T[0]);

return0;

//求串长

intlenth(SStringstr)//求串长

inti=1;

while(str[i])i++;

return(i-1);

//查找函数

voidfind(charname[],SStringkeys)//对于输入的每一个/要查找的关键字,从小说文件中逐行读取字符串查找

{

SStringtext;

//存放从小说文件读取的一行字符串

inti=1,j=0,k;

//i用于存放行号,j用于存放列号,k用于输出格式的控制

FILE*fp;

if(!

(fp=(fopen(name,"

r"

))))//打开小说文件

printf("

Openfileerror!

exit(0);

keys[0]=lenth(keys);

//求关键字的长度

get_next(keys,next);

//求模式串(关键字)每一个字符对应的next值

%s\n"

keys[1]);

//打印关键字

while(!

feof(fp))//如果还没到小说文件末尾

k=0;

fgets(&

text[1],MAXSTRLEN,fp);

//从小说文件中读取一行字符串,存入text串中

text[0]=lenth(text);

//求读入的串的长度

j=Index(text,keys,j+1);

//调用KMP算法,统计关键字在该行出现的位置,若匹配不成功则返回0

if(j!

=0)

{num++;

//次数加1

第%d次出现在第%d行第%d列\n"

num,i,j);

k++;

}//若匹配成功则打印次数、行号和列号

while(j!

=0)//若该行找到了关键字,则继续寻找看是否还能匹配成功

//调用KMP算法从刚找到的列号后一字符起匹配

=0)

{num++;

}//若匹配成功,则打印次数、行号、列号

i++;

//行号加1,在下一行中寻找

if(k)printf("

//输出格式控制

}

算法流程图:

成功

KMP串匹配示意图:

五.源程序

#include<

stdio.h>

stdlib.h>

#defineMAXSTRLEN255//最大串长

intnext[MAXSTRLEN];

//KMP算法中用到的next

voidfind(charname[],SStringkeys)//查找函数,该函数是整个程序的重要部分,对于输入的每一个

{//要查找的关键字,从小说文件中逐行读取字符串查找

inti=1,j=0,k,num=0;

j=Index(text,keys,j+1);

{num++;

}//若匹配成功则打印行号和列号

}//若匹配成功,则打印列号

}//对于每一个关键字,调用查找函数进行查找统计

六.测试情况

参考文献:

[1]谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社.330-336.

[2]陈守孔,孟佳娜,武秀川.算法与数据结构[M].北京:

机械工业出版社.71-80

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

当前位置:首页 > 小学教育 > 小升初

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

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