思路
一次性将该字符串连接上去,复制字符串即可
只有判断长的串是否包含短的串即可,因为较短的是不可能使较长的成为它的子串
C++ 代码
#include <iostream>
#include <string>
using namespace std;
bool check(string a, string b)
{
int len = a.size();
a += a; //复制字符串并连接
//if (a.find(b) >= 0 && a.find(b) < len) return true; //判断是否包含
if (a.find(b) != string::npos) return true; //判断a中是否包含b
return false;
}
int main()
{
string a, b;
cin >> a >> b;
if (a.size() < b.size()) swap(a, b);
if (check(a, b)) cout << "true";
else cout << "false";
return 0;
}
可以先判断一下a,b字符串长短,就不用两次调用函数了
精辟!
我写了一个只用substr和size的方法,可以参考一下
···
#include [HTML_REMOVED]
#include [HTML_REMOVED]
using namespace std;
int main()
{
string strl,strs,ans,t;
}
···
妙啊,巧用substr
我的可能更加容易理解一点
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s1,s2;
cin>>s1>>s2;
if(s1==s2) {cout<<”true”; return 0;}
if(s1.size()>s2.size()){
s1=s1+s1;
if(s1.find(s2)!=-1) cout<<”true”;
else cout<<”false”;}
else {
s2=s2+s2;
if(s2.find(s1)!=-1) cout<<”true”;
else cout<<”false”;}
return 0;
}
思路很好, 但是老师让尽量不用函数的目的就是想大家锻炼代码能力,题作对了,目的没达到
好厉害
大佬 问下check(a,b)是啥啊?
判断a串是否移位包含b串
看错了 原来是自己定义的check函数,我还以为check函数是c++库中自带的 感谢大佬回答
我也是
大佬,请问这个是什么意思,y总好像没讲过,我刚学不久,对C++不是很了解
我会来
这个的意思是用来表示不存在的位置,一般取值是-1,如果
a.find(b)
的返回结果是string::npos
则说明a串中不包含b串🆗,谢谢
if (a.find(b) >= 0 && a.find(b) < len)
dalao 想问一下上面这个a.find(b)<len是用来干什么的啊emmmmm
这句话的意思就是,在a串中查找b串,若返回的下标在0到len之间,说明a中含有b
emmm 那如果没有这个下标在0-len之间,只要在a串中查找到了b串 那应该也可以吧
可以,我这里find函数返回的结果是下标,所以用下标判断的,其他方法只要能判断a串中是否有b串就可以
emm 感谢 现在已经解决了 就是一开始我的代码是a.find(b)!=a.npos 这个可以通过 然后又试了您这个的>0 就很好奇 a.find(b)如果找到了的话 返回下标应该也不会超过 a的长度 所以我把<len 给删除了 提交后发现没有A 后来才发现 如果没有设置边界 find函数在遍历完字符串后没有找到对应下标他会返回一个十进制的数 所以也满足大于0的条件 所以才问您的
没有找到的返回的
string::npos
就是(unsigned long)-1
,即18446744073709551615
,所以我这里理论上写如你所说的a.find(b)!=a.npos
是更加易于理解的。好的谢谢大佬,hh
TQL 这思维厉害
笨办法,长的包含短的。
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#define pai 3.14159
using namespace std;
long long f[100]={0,1};
int main()
{
string s,s1,s2,s3;
cin>>s>>s1;
s2=s;s3=s1;
s2+=s2,s3+=s3;
if(s.size()==s1.size())
{
if(s2.find(s1)!=-1||s3.find(s)!=-1)
cout<<”true”<[HTML_REMOVED]s1.size())
{
if(s2.find(s1)!=-1)
cout<<”true”<<endl;
else
cout<<”false”<<endl;
}
else
{
if(s3.find(s)!=-1)
cout<<”true”<<endl;
else
cout<<”false”<<endl;
}
}
find函数怎么用噢
太猛了,a+=a;真的精髓,想不到
这一句什么意思有点没看懂,大佬可以解释一下吗
int len = a.size();
这句话有什么用?不是没有用到吗?
之前用到过,现在已经注释了,没用了
哥tql
#include[HTML_REMOVED]
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
string s1,s2,s3;
cin>>s1>>s2;
if(s2.size()>s1.size())
{
swap(s1,s2);
}
s1+=s1;
for(int i=0,len=(s1.size());i<len;i++)
{
if(s1[i]==s2[0])
{
s3=s1.substr(i,s2.size());
if(s3==s2)
{
cout<<”true”;
return 0;
}
}
}
cout<<”false”;
return 0;
}