字符串匹配
【问题描述】
对于字符串S和T,若T是S的子串,返回T在S中的位置(T的首字符在S中对应的下标),否则返回-1.
【问题求解】
● ㈠ BF算法
该直接穷举算法从字符串S的每一个字符开始查找,看字符串T是否会出现。
第一步:把T[0] 跟S [0] 匹配,如果相同则匹配下一个字符;
第二步:当出现字符不相同,丢弃前面的已匹配信息 ,T[1] 跟 S[0]匹配,循环进行,直到主串结束,或者出现匹配成功的情况。
例如:S=“aababcde”,T=“abcd”;过程如下:
【BF算法代码】
#include<stdio.h>
#include<string.h>
int BF(char s[],char t[]) //字符串匹配
{
int i=0,j=0;
while (i<strlen(s)&&j<strlen(t))
{
if(s[i]==t[j]){
//比较两个字符串相同时
i++;
j++;
}
else{
//比较两个字符串不相同时
i=i-j+1; //i回退到原来i的下一个位置
j=0; //j从0开始
}
}
if(j==strlen(t)) //t的字符比较完毕
return i-j; //t是s的子串,返回位置
else //t不是s的子串
return -1; //返回-1
}
int main(){
char S[]="abaacababcac";
char T[]="ababc";
printf("T在S中出现的起始位置: %d\n",