数据结构例程——串的模式匹配(Brute-Force算法)

本文针对数据结构基础系列网络课程(4):串中第5课时串的模式匹配(Brute-Force算法)

问题:模式匹配,设有主串s和子串t,在主串s中找到一个与子串t相等的子串。

解答:(头文件sqstring.h见顺序串算法库

#include <stdio.h>
#include "sqString.h"

int index(SqString s,SqString t)
{
    int i=0,j=0;
    while (i<s.length && j<t.length)
    {
        if (s.data[i]==t.data[j])   //继续匹配下一个字符
        {
            i++;                //主串和子串依次匹配下一个字符
            j++;
        }
        else                    //主串、子串指针回溯重新开始下一次匹配
        {
            i=i-j+1;            //主串从下一个位置开始匹配
            j=0;                //子串从头开始匹配
        }
    }
    if (j>=t.length)
        return(i-t.length);         //返回匹配的第一个字符的下标
    else
        return(-1);             //模式匹配不成功
}
int main()
{
    SqString s,t;
    StrAssign(s,"ababcabcacbab");
    StrAssign(t,"abcac");
    printf("s:");
    DispStr(s);
    printf("t:");
    DispStr(t);
    printf("位置:%d\n",index(s,t));
    return 0;
}
时间: 2024-10-27 14:49:26

数据结构例程——串的模式匹配(Brute-Force算法)的相关文章

数据结构例程——串的模式匹配(KMP算法)

本文针对数据结构基础系列网络课程(4):串中第5课时串的模式匹配(KMP算法). 问题:串的模式匹配 KMP算法: #include <stdio.h> #include "sqString.h" void GetNext(SqString t,int next[]) /*由模式串t求出next值*/ { int j,k; j=0; k=-1; next[0]=-1; while (j<t.length-1) { if (k==-1 || t.data[j]==t.d

数据结构例程——串的顺序存储应用

本文针对数据结构基础系列网络课程(4):串中第3课时串的顺序存储应用. 例1:串比较 问题: 设计实现串比较运算的算法 算法思路 (1)比较s和t两个串共同长度范围内的对应字符: ① 若s的字符>t的字符,返回1: ② 若s的字符<t的字符,返回-1: ③ 若s的字符=t的字符,按上述规则继续比较. (2)当(1)中对应字符均相同时,比较s和t的长度: ① 两者相等时,返回0: ② s的长度>t的长度,返回1: ③ s的长度<t的长度,返回-1. #include <stdi

数据结构例程——最小生成树的普里姆算法

本文是[数据结构基础系列(7):图]中第11课时[最小生成树的普里姆算法]的例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) #include <stdio.h> #include <malloc.h> #include "graph.h" void Prim(MGraph g,int v) { int lowcost[MAXV]; //顶点i是否在U中 int min; int closest[MAXV]

大话数据结构十:字符串的模式匹配(BF算法)

1. BF算法简介: BF(Brute Force)算法是普通的模式匹配算法,又称为朴素匹配算法或蛮力算法,该算法最大缺点就是字符匹配失败指针就要回溯,所以性能很低. 2. BF算法思想: 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的第二个字符和P的第一个字符

数据结构例程——二叉树的层次遍历算法

本文是数据结构基础系列(6):树和二叉树中第12课时层次遍历算法的例程. [二叉树的层次遍历算法] 实现二叉树的层次遍历算法,并对用"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"创建的二叉树进行测试. 请利用二叉树算法库. [参考解答](btreee.h见算法库) #include <stdio.h> #include "btree.h" void LevelOrder(BTNode *b) { BTNode *p; BT

数据结构例程——图的邻接矩阵存储结构及算法

本文是[数据结构基础系列(7):图]中第4课时[图的邻接矩阵存储结构及算法]的例程. #include <stdio.h> #include <malloc.h> #define MAXV 100 /*最大顶点数设为100*/ #define LIMITLESS 9999 typedef struct { int no; //顶点编号 char info[20]; //顶点其他信息,类型视应用而定 } VertexType; //顶点类型 typedef struct //图的定义

数据结构例程——最小生成树的克鲁斯卡尔算法

本文是[数据结构基础系列(7):图]中第12课时[最小生成树的克鲁斯卡尔算法]的例程. (程序中graph.h是图存储结构的"算法库"中的头文件,详情请单击链接-) #include <stdio.h> #include <malloc.h> #include "graph.h" #define MaxSize 100 typedef struct { int u; //边的起始顶点 int v; //边的终止顶点 int w; //边的权值

大话数据结构十二:字符串的模式匹配(BM算法)

1. BM算法简介: KMP算法其实并不是效率最高的字符串匹配算法,实际应用的并不多,各种文本编辑器的"查找"功能大多采用的是BM算法(Boyer Moore).BM算法效率更高,更容易理解. 2. BM算法分析: (1) 假定字符串为"HERE IS A SIMPLE EXAMPLE",搜索词为"EXAMPLE". (2) 首先,"字符串"与"搜索词"头部对齐,从尾部开始比较.这是一个很聪明的想法,因为如

大话数据结构十一:字符串的模式匹配(KMP算法)

1. KMP算法简介: kmp算法是一种改进的字符串匹配算法,相比朴素算法,KMP算法预先计算出了一个哈希表,用来指导在匹配过程中匹配失败后尝试下次匹配的起始位置,以此避免重复的读入和匹配过程.这个哈希表被称为"部分匹配值表"(Particial match table),这种设计是KMP算法最精妙之处. 2. KMP算法分析: 下面以阮一峰老师博客中的一篇文章来分析KMP算法的原理:有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否