18:验证子串
总Time Limit:
1000ms
Memory Limit:
65536kB
Description
输入两个字符串,验证其中一个串是否为另一个串的子串。
Input
输入两个字符串, 每个字符串占一行,长度不超过200且不含空格。
Output
若第一个串s1是第二个串s2的子串,则输出(s1) is substring of (s2)
否则,若第二个串s2是第一个串s1的子串,输出(s2) is substring of (s1)
否则,输出 No substring。
Sample Input
abc dddncabca
Sample Output
abc is substring of dddncabca
Source
JerryCircle[Java 语言程序设计]
#include<bits/stdc++.h>
using namespace std;
/*
思路:
定义string变量s1,s2和一个标志变量,再用getline输入
第一个循环是第二个字符串是长的,第一个字符串是
子字符串,第二个循环是相反的,如果进循环了的话
先把标志变量值赋格个1,如果子字符串和长的字符串
的字母不同,就把标志变量的值赋个0,否则,如果
flag == 1就输出
(s1) is substring of (s2)或 (s2) is substring of (s1)
并且,return 0
如果,标志变量的值还是0,就说明,这个长的字符串
中没有子字符串,就输出 No substring
*/
int main(){
string s1,s2;//定义
getline(cin,s1);//输入
getline(cin,s2);
int l1 = s1.size();//把长度赋给l1,l2
int l2 = s2.size();
int flag = 0;//定义标志变量
for(int i = 0; i < l2; i++)
{
flag = 1;//赋值为1
for(int j = i; j < l1+i; j++)
{
if(s1[j-i] != s2[j])
flag = 0;//不成立就赋为0
}
if(flag == 1)//看它有没有成立的
{
cout<<s1<<" is substring of "<<s2;
return 0;
}
}
for(int i = 0; i < l1; i++)
{
flag = 1;
for(int j = i; j < l2+i; j++)//赋值为1
{
if(s2[j-i] != s1[j])
flag = 0;//不成立就赋为0
}
if(flag == 1)//看它有没有成立的
{
cout<<s2<<" is substring of "<<s1;
return 0;
}
}
if(flag != 1) printf("No substring");//标志变量的值还是0,就说明,这个长的字符串中没有子字符串,就输出 No substring
return 0;
}