赤裸裸的字符串匹配问题
#include<algorithm> #include<cstdio> #include<cstring> #include<iostream> #include<queue> #define N 205 #define INF 0x3f3f3f3f typedef long long LL; using namespace std; int next[105]; char S[105],S0[105],T[105]; void getnext() { int i=0,j=-1; next[0]=-1; while(T[i]!='\0') { if(j==-1||T[i]==T[j]) next[++i]=++j; else j=next[j]; } } int kmp() { int i=0,j=0,l1=strlen(S),l2=strlen(T); while(i<l1&&j<l2) { if(j==-1||S[i]==T[j]) ++i,++j; else j=next[j]; } if(j>=l2) return i-l2+1; return -1; } int main() { int n,m,i; cin>>T>>n; if(n!=1) for(i=0;T[i]!='\0';++i) T[i]=tolower(T[i]); getnext(); cin>>m; while(m--) { cin>>S0; strcpy(S,S0); if(n!=1) for(i=0;S[i]!='\0';++i) S[i]=tolower(S[i]); if(kmp()!=-1) puts(S0); } return 0; }