前排感谢学长赞助!我把值得注意的点都在题解里注释出来了,希望能帮上大家(`・ω・´)
有别的更好的思路欢迎与我分享~
问题 R: 验证子串
时间限制: 1 Sec 内存限制: 128 MB提交: 37 解决: 9
[ 提交][ 状态][ 讨论版]
题目描述
输入两个字符串,验证其中一个串是否为另一个串的子串。
输入
输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。
输出
若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)
否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)
否则,输出 No substring。
样例输入
abcdddncabca
样例输出
abc is substring of dddncabca
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s1[1001],s2[1001];
cin>>s1;cin>>s2;
int flag=0;//判断是否已找出,一开始假设没找出
int same=0;//相同的数量
int l1=strlen(s1),l2=strlen(s2);
if(l1>l2)//为了省事,我把短的字符串作为s1,长一些的为s2
{
swap(s1,s2);//交换
swap(l1,l2),
}
for(int i=0;i<l2;i++)//循环l2次
{
if (s2[i]==s1[0])//如果s2的第i位等于s1的第一位
{ same=0;//先把相同数归0(重要!!!)
for(int j=0;j<l1;j++)//判断s2接下来的字符是否等于s1的
{
if(s1[j]==s2[i+j]) same++;//把s1的每一个与s2的每一个相比较
else break;//如果只是第一位相同,但接下来的数位不同,切断这一层for循环
}
if (same==l1){
cout<<s1<<" "<<"is substring of"<<" "<<s2<<endl;
flag=1;//已找出
return 0; }
}
}
if (flag==0)//没找出
cout<<"No substring"<<endl;//这种题目给的字符直接复制为好,我就因为手打错了两次QAQ
return 0;
}