字符串子串匹配
输入:
字符串S;
字符串T;
对于字符串S和T,若T是S的子串,返回T在S中的位置(T的首字符在S中对应的下标),否则返回-1.
思路:
参考:《C语言》字符串匹配(BF算法+KMP算法)
BF算法 该直接穷举算法从字符串S的每一个字符开始查找,看字符串T是否会出现。 第一步:把T[0] 跟S [0]
匹配,如果相同则匹配下一个字符; 第二步:当出现字符不相同,丢弃前面的已匹配信息 ,T[1] 跟
S[0]匹配,循环进行,直到主串结束,或者出现匹配成功的情况。 例如:S=“aababcde”,T=“abcd”;过程如下:
PS:字符串输入方法
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int BF(char s[],char a[])
{
int i = 0;//遍历s的索引
int j = 0;//遍历a的索引
int m = strlen(s);
int n = strlen(a);
while(i < m && j < n){ //匹配成功即j < n跳出循环,不成功即i > m跳出循环
if(s[i] == a[j]){ //两个字符相同时,继续遍历
i++;
j++;
}
else{ //字符不相同
i = i - j + 1; //i回退到原来的i(即j的位置)的下一个位置
j = 0;//j重新遍历t
}
}
//t字符比较完毕
if(j == n){ //a是s的子串,返回位置
return i - j;
}
else{
return -1;//a不是s的子串,返回-1
}
}
int main()
{
char s[10000];
scanf("%s",&s);
char a[10000];
scanf("%s",&a);
printf("%d",BF(s,a));
return 0;
}
如果字符串中一定存在要找的字串,可以直接用find函数:
#include <iostream>
#include "stdio.h"
#include "string.h"
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string s;
string a;
cin >> s >> a;
cout << s.find(a);
}