简单字符串模式匹配算法的C++实现

/*
*   simpleIndex.cpp
*   Author: Qiang Xiao
*   Time: 2015-07-13
*/

#include<iostream>
#include<string>
using namespace std;

int simpleIndex(const string&, const string&, int);

int main(){
    string t1= "Hello, world!";
    string p1= "o";
    int pos= 0;
    int re= simpleIndex(t1, p1, pos);
    cout<<re<<endl;

    return 0;
}

int simpleIndex(const string& T, const string& P, int pos= 0){
    int startPos= pos, i= pos, j= 0;
    while(i< T.length() && j< P.length()){
      if(T[i]== P[j]){
          i++;
          j++;
      }
      else{
          i= ++startPos;
          j= 0;
      }
    }
    if(j== P.length())
      return startPos;
    else
      return -1;
}

串的模式匹配最基本的算法。

当作练习用。

欢迎交流!

时间: 2024-07-29 07:54:32

简单字符串模式匹配算法的C++实现的相关文章

[转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽

字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 转载自:http://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boyer-Moore算法 §2 Horspool算法 §3 Sunday算法 §4 KMP算算法 §5 KR算法 §6 AC自动机 §7 小结 §1 Boyer-Moore(BM)算法 Boyer-Moore算法原理 Boyer-Moore算法是一种基于后缀匹配的模式串匹配算法,后缀匹配就是模式串从右到

Java数据结构之字符串模式匹配算法---Brute-Force算法

模式匹配 在字符串匹配问题中,我们期待察看源串 " S串 " 中是否含有目标串 " 串T " (也叫模式串).其中 串S被称为主串,串T被称为子串. 1.如果在主串中查找到子串,则称为模式匹配成功,返回模式串的第一个字符在主串中出现的位置. 2.如果在主串中未找到子串,则称为模式匹配失败,返回-1. 在模式匹配过程中有两个比较经典的算法:Brute-Force与KMP算法是两种最经典的模式匹配算法. 在本片中主要分析BF算法,很黄很暴力.下面是简单的思路解析:  

字符串模式匹配算法之一:朴素模式匹配算法

被搜索的字符串称为主串,待搜索的字符串称为模式串.朴素模式匹配算法的基本思想: 对主串的每一个字符作为子串开头,与模式串进行匹配.对主串做大循环,每个字符开头做模式串长度的小循环,直到匹配成功或全部遍历完成为止. 代码实现非常简单: int strStr(char *haystack, char *needle) { for (int i = 0; ; ++i) { for (int j = 0; ; ++j) { if (!needle[j]) return i; if (!haystack[

字符串模式匹配算法--详解KMP算法

在软考的复习中,看到过几次  字符串的模式匹配算法.看起来挺难的.所以花了点时间查了查关于字符串匹配的算法.下面详细介绍一下KMP模式匹配算法 什么是字符串的匹配? 在文章中进行查找.需要找到要查找的内容所在的位置.就是字符串的匹配. 朴素的模式匹配算法 朴素的模式匹配算法,就是把要查找的内容,一步步的与要查找的文章进行进行比较.如果匹配失败,则主串和字串回溯.字串位置加1.重新匹配. 模式匹配算法的流程如下: 在匹配失败的情况下,模式串仅右移一个 之后.在从头开始匹配. 两个for循环 For

字符串模式匹配算法之二:KMP算法

KMP算法简介 KMP算法全称叫做Knuth-Morris-Pratt Algorithm. 被搜索的字符串称为主串,待搜索的字符串称为模式串. 我们知道朴素模式匹配算法:http://blog.csdn.net/chfe007/article/details/43448655是很低效的,KMP算法从模式串出发,发现模式串中隐藏的信息来减少比较的次数,具体如何做到的可以移步这个链接:http://kb.cnblogs.com/page/176818/ KMP算法的关键在于next数组值的推导.

Java数据结构之字符串模式匹配算法---KMP算法

本文主要的思路都是参考http://kb.cnblogs.com/page/176818/ 如有冒犯请告知,多谢. 一.KMP算法 KMP算法可以在O(n+m)的时间数量级上完成串的模式匹配操作,其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯指针,而是利用已经得到的"部分匹配"结果将模式向右"滑动"尽可能远的一段距离,继续进行比较.显然我们首先需要获取一个"部分匹配"的结果,该结果怎么计算呢? 二.算法分析 在上一篇中讲到了BF算法,

Java数据结构之字符串模式匹配算法---KMP算法2

直接接上篇上代码: 1 //KMP算法 2 public class KMP { 3 4 // 获取next数组的方法,根据给定的字符串求 5 public static int[] getNext(String sub) { 6 7 int j = 1, k = 0; 8 int[] next = new int[sub.length()]; 9 next[0] = -1; // 这个是规定 10 next[1] = 0; // 这个也是规定 11 // 12 while (j < sub.l

KMP字符串模式匹配算法(C++实现)

鉴于原理有点复杂,详细原理可以参考这篇文章http://blog.csdn.net/v_july_v/article/details/7041827 本文直接从结论入手,应付考试和竞赛足够了. 设T为目标串("aaabbbaabbabcabcabbaba"),pat为模式串("aabbabc"). 这是模式串的next数组: j(下标) 0 1 2 3 4 5 6 pat a a b b a b c next[j] -1 0 1 0 0 1 0 KMP算法: j=0

kmp字符串模式匹配算法

概述 ??kmp算法我觉得有两个关键点:1.计算模式字符串的部分匹配表(这时候,自己跟自己比较)2.匹配主串时候,主串字符只遍历一遍,匹配时候,根据模式串的部分匹配表计算模式串应该移动的位置.kmp算法时间复杂度为O(m+n);下面我实现的算法代码(PHP) 理论 关于kmp理论部分,这篇文章写得好:http://kb.cnblogs.com/page/176818/.我就不再赘述了. 计算部分匹配表 function kmp_next($string){ $length = strlen($s