樸素的模式匹配演算法

c.發表於2015-05-15
/*T為非空串。若主串S中的第pos個字元之後存在與T相等的子串,*/
/*則返回第一個這樣的子串在S中的位置,否則返回0.*/

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

int Index(string S,string T,int pos) //S為你要在T串中匹配的串
{

    int i=pos;  //用於主串S當前位置下標,從pos位置開始匹配
    int j=0;    //串T的當前下標
    int LengthS=S.length();
    int LengthT=T.length();
    while(i<LengthS && j<LengthT)
    {
        if(S[i]==T[j])
        {
            ++i;
            ++j;
        }
        else
        {
            i=i-j+1;
            j=0;
        }
    }
    if(j>=LengthT)
    {
        return i-LengthT;
    }
    else
    {
        return -1;
    }
}

int main()
{
    string T="abcdefg";
    string S="efg";
    int index=Index(T,S,0);
    cout<<index<<endl;
    return 0;
}

執行結果

相關文章