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; }