C++串模式匹配实验
Posted 康小庄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++串模式匹配实验相关的知识,希望对你有一定的参考价值。
1.设计BF算法(参考课本92页算法4.1),完成如下功能:
1)建立目标串s=“abcabcabdabba”和模式串t=“abcabd”。
2)采用BF算法求t在s中的位置。
运行结果如图所示:
#include <stdio.h>
#include <string.h>
#define MaxSize 100
typedef struct
char data[MaxSize]; //定义可容纳MaxSize个字符的空间
SqString;
void StrAssign(SqString &str, char cstr[]) //str为引用型参数
int i;
for (i = 0; cstr[i] != '\\0'; i++)
str.data[i + 1] = cstr[i];
str.data[0] = i;
void DispStr(SqString str)
int i;
if (str.data[0] > 0)
for (i = 1; i <= str.data[0]; i++)
printf("%c", str.data[i]);
printf("\\n");
//BF算法
int Index(SqString s, SqString t)
int i = 1, j = 1;
//printf("%s", s.data);
//printf("%s", t.data);
//printf("\\n");
while (s.data[i] != '\\0' && t.data[j])
if (s.data[i] == t.data[j])
i++;
j++;
else
//主串回溯到上次回溯位置的下一个位置
i = i - j + 2;
//模式串回溯到第一个位置
j = 1;
if (t.data[j] == '\\0')
//返回T在S中第一次出现的位置
return i - j + 1;
else
return 0;
//int Index_kmp(SqString s, SqString t)
//KMP算法
//
//
int main()
SqString s, t;
StrAssign(s, "abcabcabdabba");
StrAssign(t, "abcabd");
printf("串s:");
DispStr(s);
printf("串t:");
DispStr(t);
printf("简单匹配P算法:\\n");
printf("t在s中的位置=%d\\n", Index(s, t));
运行截图
以上是关于C++串模式匹配实验的主要内容,如果未能解决你的问题,请参考以下文章
数据结构(c++)字符串 模式匹配算法问题,对高手来说只要写一点点
数据结构(c++)字符串 模式匹配算法问题,对高手来说只要写一点点