注:本文采用的暴力枚举的方法,也可以采用KMP算法见另文
Description |
建立字符串的定长存储结构,输入两个字符串s、t,判断t是否包含在s里面。 (可以考虑用KMP算法实现) Input 多组输入,每次输入两个字符串。 Output若果匹配成功输出t在s中出现的起始位置,否则输出0。 说明:输出有换行 |
Sample Input |
ABCDEFG DEF ABCDEFG EEE |
Sample Output |
4 0 |
#include<stdio.h>
#include<bits/stdc++.h>
#include<iostream>
#define Max_str 255
using namespace std;
typedef struct{
char *ch;
int length;
}Hstring;
void initString(Hstring &S){
S.ch=new char[Max_str];
S.length=Max_str;
for(int i=0;i<S.length;i++){
S.ch[i]='\0';
}
}
void Strass(Hstring &S,char *chars){
int i=0;
char *c;
for(i=0,c=chars;*c;i++,c++);
for(int j=0;j<i;j++){
S.ch[j]=chars[j];
}
S.length=i;
}
void Strprint(Hstring S){//输出字符串S
for(int i=0;i<S.length;i++){
cout<<S.ch[i];
}
}
int index_BF(Hstring S,Hstring T,int pos){//字符串匹配(暴力)
//S为主串,T为子串,pos为开始位置
int i=pos,j=0;
while(i<S.length&&j<T.length){
if(S.ch[i]==T.ch[j]){
i++;
j++;
}
else{
i=i-j+1;
j=0;
}
}
if(j>=T.length-1){
return i-T.length+1;
}
else{
return 0;
}
}
int main(){
int pos=0;
Hstring S,T;
initString(S);
initString(T);
char chars[Max_str];
char chars1[Max_str];
while(cin>>chars){
Strass(S,chars);
//cout<<S.length;
//Strprint(S);
cin>>chars1;
Strass(T,chars1);
//cout<<T.length;
//Strprint(T);
cout<<index_BF(S,T,pos)<<"\n";
}
return 0;
}