openjudge 1.7.18 验证子串

视频讲解:1.7.18 验证子串_哔哩哔哩_bilibili 

OpenJudge - 18:验证子串


解题思路:

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;
 } 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值