视频讲解:1.7.18 验证子串_哔哩哔哩_bilibili
解题思路:
1.由题可知,如果判断一个字符串是否为另一个字符串的子串,那么首先判断哪个字符串比较长,然后在较长的字符串中寻找较小的字符串
2.利用string来获取两个字符串,然后通过长度比较,如果a的长度大于b,则从a的下标0位置开始遍历,如果a[i]==b[0],则创建一个内循环,并用一个flag作为标记,内循环从j=1开始遍历,遍历到lenb-1,如果a[i+j]==b[j],那么继续,否则打上标记退出循环
3.判断标记的值,看是如何退出的循环,如果是内循环执行完正常退出,则说明b是a的子串,输出内容,然后结束程序。如果是中途break退出循环,那么继续遍历外循环
4.最后cout<<"no subring";表示如果上述两种情况都没有提前结束程序,那么说明谁也不是谁的子串,输出对应内容。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;//定义字符串
cin>>a>>b;//输入字符串
int lena=a.length();//获取字符串的长度
int lenb=b.length();
if(lena>lenb)//如果字符串a更长的话
{
for(int i=0;i<=lena-1;i++)
{
bool flag=1;//打标记
if(a[i]==b[0])//如果发现a[i]和字符串b的首个字符相等
{
for(int j=1;j<=lenb-1;j++)//开始判断后面的是否相等
{
if(a[i+j]==b[j])
continue;
else//发现有一个不相等的话
{
flag=0;//打标记
break;//退出循环
}
}
if(flag==1)//判断标记是否改变
{
cout<<b<<" is substring of "<<a;
return 0;
}
}
}
}
else//同理,如果字符串b更长或者相等的话
{
for(int i=0;i<=lenb-1;i++)
{
bool flag=1;
if(b[i]==a[0])
{
for(int j=1;j<=lena-1;j++)
{
if(b[i+j]==a[j])
continue;
else
{
flag=0;
break;
}
}
if(flag==1)
{
cout<<a<<" is substring of "<<b;
return 0;
}
}
}
}
cout<<"No substring";//如果都不满足上述两个条件,则输出no substring
return 0;
}