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++)字符串 模式匹配算法问题,对高手来说只要写一点点

求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法

字符串的基本操作实验

字符串的基本操作实验

数据结构实验:串基本操作的实现