前言:
最近在学数据结构,自己写了一下这个字符串的BF算法的实现,BF还是相对比较简单的一个算法。有不懂的欢迎留言。
代码部分:
-
#include<bits/stdc++.h> using namespace std; #define MAXLEN 255 typedef struct { char ch[MAXLEN + 1]; int length; }SString; int StringCreate(SString& C, int n) { C.length = 0; for (int i = 1; i <= n; i++) { cout << "请输入第"<<i<<"个元素" << endl; cin >> C.ch[i]; C.length++; } return 1; } void prt(SString C) { cout << "该串为:" << endl; for (int i = 1; i <= C.length; i++) { cout<< C.ch[i]; } cout << endl; } int BF(SString S, SString T, int pos) { int i = pos;//用i来记录S中字符的位置 int j = 1;//用j来记录T中字符的位置 //两个字符串均未比较到串尾 while (i <= S.length && j <=T.length) { if (S.ch[i] == T.ch[j]) { i++; j++; } else //指针后退重新开始匹配 { i = i - j + 2; j = 1; } } if (j > T.length) //匹配成功 { return i - T.length; } //匹配失败 else return 0; } int main() { int n1,n2; SString S; cout<<"主串S长度:"<<endl; cin >> n1; StringCreate(S, n1); prt(S); SString T; cout << "模式串T长度:" << endl; cin >> n2; StringCreate(T, n2); prt(T); cout << "主串和模式串在第" << BF(S, T, 1) << "个字符处首次匹配\n"; return 0; }