测试数据
abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab
abababababababababababababababababababababababababababababababababababababababababababababababababab
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaa
aaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbb
sss
sssss
abcde
bcdea
aabaabaabaa
aab
q
q
ppoo
oopp
qweqwe
qwe
xyxyxyyxyxyx
yx
结果
901
39
0
0
1
9
1
1
4
10
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
/*11.28 2.字符串匹配*/
const int n = 10;
string *strA = new string[n];
string *strB = new string[n];
int *count = new int[n] {};
for (int i = 0; i < n; i++) {
cin >> strA[i] >> strB[i];
}
//t表示字符串匹配执行的组数
for (int t = 0; t < n; t++) {
//k作为匹配时strA的下标,start表示strB下标开始匹配的地方,flag表示该位置是否匹配成功
for (int i = 0, k = 0, start = 0, flag = 0; i+ strB[t].length() <= strA[t].length(); i++) {
k = i;
flag = 0;//默认未匹配成功
//找strB匹配开始的地方,strB中可能存在多处匹配的地方
for (int j = 0; j < strB[t].length(); j++) {
if (flag) {//匹配成功了则无需在此处继续匹配了
break;
}
//找到了匹配的地方,即可开始匹配
if (strA[t][k] == strB[t][j]) {
start = j;
//字符串匹配
for (int l = 0; l < strB[t].length(); l++) {
if (strA[t][k] != strB[t][start]) {
break;
}
//是否全部匹配上了
if (l == (strB[t].length() - 1)) {
count[t]++;
flag = 1;
}
k++;
start = (start + 1) % strB[t].length();
}
}
}
}
}
for (int i = 0; i < n; i++) {
cout << count[i] << endl;
}
}