朴素的字符串匹配

Posted ziyuemeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了朴素的字符串匹配相关的知识,希望对你有一定的参考价值。

字符串匹配

朴素的字符串匹配

挨个扫描就完了,简直太他妈朴素了,就这我还没写出来,看了之后手法还是很精妙的

#include<iostream>
using namespace std;
int StrLen(const char* str){
    const char* p = str;
    int i = 0;
    while(*p){
        i++;
        p++;
    }
    return i;
}
const char* StrStr(const char* str1,const char* str2){
    if(str2 == NULL){
        return NULL;
    }
    const char* p = str1;
    while(*p){
        const char* p1 = p;
        const char* p2 =str2;
        while(*p1 && *p2 && (*p1 == *p2)){
            p1++;
            p2++;
        }
        if(!*p2){
            return p;   //这里返回的实际上是源串的匹配好的字串,可能含有多余字符
        }               //如str1为mengziyue,str2为zi,这时返回的是ziyue
        p++;
    }
    return NULL;
}
int StrForLoop(const char* str1,const char* str2){
    int str1_len = StrLen(str1);
    int str2_len = StrLen(str2);
    int max_len = str1_len - str2_len;
    for(int i = 0;i < max_len;i++){
        int match_len = 0;
        while(match_len < str2_len &&                str1[i+match_len] == str2[match_len]
             ){
            match_len++;
        }
        if(match_len == str2_len){
            return i;
        }
    }
    return -1;
}
int main(){
    const char* str1 = "xiandianzikejidaxue";
    const char* str2 = "keji";
    const char* str3 = StrStr(str1,str2);
    cout<<str3<<endl;
    cout<<StrForLoop(str1,str2)<<endl;
    return 0;
}

以上是关于朴素的字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

朴素的字符串匹配

图解字符串的朴素模式匹配算法

算法导论字符串匹配—朴素算法Rabin-Karp有限自动机KMP

朴素模式匹配算法(C语言)

java JAVA 8中的朴素字符串模式匹配实现

字符串模式匹配KMP算法