C 字串匹配

#include <stdio.h>
#include <string.h>

int  findStart(int start,char str[],char pat[]);
int  match(int start,char str[],char pat[]);


int main(){
    char str[100]="abljfvbajlfvblaksdbc;laksdbnc;afgvblaiusgdvlciuaosdgbcui;la";
    char pattern[]="aks";
    //printf("%d",findStart(0,str,pattern));//ok
    //printf("%d",match(5,str,pattern));//ok
    printf("%d",findStart(0,str,pattern));
    return 1;
}

/**
返回我要找的字串开始位置

原本两个方法可以放在一起 不过这样更清晰一点
*/
int  findStart(int start,char str[],char pat[]){
    int find=-1;
    char patStart=pat[0];
    int i=0;
    for(i=start;i<100;i++){
        if(str[i]==patStart){//首先找到pat第一个字母在主串中开始位置
            printf("start %d,",i);
            find=match(i,str,pat);//再看是否和主串匹配
            if(find){
                printf("\n%d",i);
                break;
            }
        
        }
    }
    return (find>0)?i:-1;//如果找到了 就返回找到的下标 否则返回-1
}


/**
返回真假 真表示匹配上
*/
int match(int start,char str[],char pat[]){
    int match=1;
    int pi=0;
    int si=start;
    while(pat[pi]!='\0'){
        if( pat[pi]==str[si]    ){
            si++;
            pi++;        
        }else{

            match=0;
            break;//一旦发现不匹配 立刻退出
        }

    }
    printf("match");
    return match;

}
原文地址:https://www.cnblogs.com/cart55free99/p/2982797.html