C++字符串匹配的BF算法

2019-07-25  本文已影响0人  townof1997

代码如下:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2


typedef int Status;

#define MAXSTRLEN 255       //用户可在255以内定义最长字符串  

typedef char SString[MAXSTRLEN + 1];                //0号单元存储的长度

Status StrAssgin(SString T, char *chars)
{
    int i;
    if(strlen(chars > MAXSTRLEN))
        return ERROR;
    else 
    {
        T[0] = strlen(chars);
        for( i =1; i <= T[0]; i++)
            T[i] = *(chars + i - 1);
        return OK;
    }
 } 
 
 // BF算法 
 Status Index(SString S, SString T, int pos)
 {
        // 返回模式T在主串S中第pos个字符串之后第s一次出现的位置,若不存在,则返回值为0,其中T非空,1<=pos <=StrLength(S) 
        int i = pos;
        int j = 1;
        while(i<=S[0] && J<=T[0])
        if(S[i] == T[j])
        {
            ++i;
            ++j;
        }   //继续比较后续字符
        else {
            i = i -j +2;
            j = 1;
        } //指针后退,重新开始匹配
        if(j>T[0])
            return i - T[0];
        return 0; 
 
 } 



// 字符串的匹配算法
 
int main()
{
    SString S;
    StrAssign(S, "bbaaabbabaaaaabb");
    SString T;
    StrAssign(T, "baba");
    
    cout << "主串和子串在第" << Index(S, T, 1) << "个字符处位置首次匹配" << endl; 
    
    
    return 0;
}

文章有待维护.

上一篇 下一篇

猜你喜欢

热点阅读