实验目的:掌握模式匹配的基本概念,基本原理。
实验要求:掌握模式匹配的基本概念和基本原理。字符串的逻辑特性、存储表示方法,实现模式匹配算法。
实验内容:
编写程序实现模式匹配算法。
#include<iostream>
using namespace std;
//BF算法
int BF(string S, string T) {
int start = 0; /*主串从下标0开始第一趟匹配*/
int i = 0, j = 0; /*设置比较的起始下标*/
while((S[i] != '\0') && (T[j] != '\0')) {
if(S[i] == T[j]) { /*如果S[i]等于T[j],继续比较S和T的下一对字符*/
i++;
j++;
} else {
start++; /*下标i和j分别回溯*/
i = start;
j = 0;
}
}
if(T[j] == '\0') {
cout << "BF算法匹配成功,返回匹配的起始比较下标:";
return start + 1;/*返回本趟匹配的起始位置*/
} else {
cout << "BF算法匹配失败,返回:";
return 0;
}
}
int main() {
string S, T;
cout << "请输入主串S:" << endl;
cin >> S;
cout << "请输入模式T:" << endl;
cin >> T;
/*
string S = "ababcabcacbab"; //主串S:ababcabcacbab
string T = "abcac"; //模式T:abcac
*/
cout << "主串S:" << S << endl;
cout << "模式T:" << T << endl;
cout << BF(S, T) << endl;
return 0;
}
#include<iostream>
using namespace std;
//BF算法
int BF(const string& s, const string& t) {
int i = 0, j = 0;
while (i < s.length() && j < t.length()) {
if(s[i] == t[j]) {
i++;
j++;
} else {
j = 0;
i = i - j + 1;
}
}
if (j == t.length()) {
cout << "BF算法匹配成功,返回匹配的起始比较下标:";
return i - t.length() + 1;
} else {
cout << "BF算法匹配失败,返回:";
return 0;
}
}
int main() {
//string S = "ababcabcacbab"; // 主串S="ababcabcacbab"
string S ;
//string T = "abcac"; // 模式T="abcac"
string T ;
cout << "请输入主串S:" << endl;
cin >> S;
cout << "请输入模式T:" << endl;
cin >> T;
cout << "主串S:" << S << endl;
cout << "模式T:" << T << endl;
int reslut = 0;
reslut = BF(S, T);
cout << reslut << endl;
return 0;
}
|