寻找字符串子串问题c++
代码如下:
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
void test01(){
char yuan[20]="\0";
char zi[20]="\0";
cin>>yuan>>zi;
int len1=0;int len2=0;
for(int i=0;yuan[i]!='\0';i++){
len1++;
}
for(int i=0;zi[i]!='\0';i++){
len2++;
}
if(len2>len1){
cout<<"没有"<<endl;
exit(1);
}
char *y=yuan;
char *z=zi;
int i=0;
while(*y!='\0'&&*z!='\0'){
if(*y==*z){
y++;z++;i++;
}
else{
if(*z!=zi[0]){
z=zi;
y=y-i+1;
i=0;
}
else{
y++;z++;
}
}
}
if(*z=='\0'){
cout<<"找到该子串"<<endl;
cout<<"位置为"<<y-len2 ;
}
}
int main(){
test01();
return 0;
}
/*
hhhhhkjj
hhhk
ahduhdasjo
hda*/
主要讲解while循环部分
当子串字母与源串相同时,继续判断。
若不同,分两种情况。
1子串在首字母。说明源串与子串第一个就不同,自然二者都加一向下继续判断。
2子串指针不在首字母。说明源串与子串在其中某个字母不同,这时需要把子串指针重新指向第一个字母,而把源串指针移动到最初判断相等的字母之后。
例如:源串hhhhhhkj
子串hhk