题目描述
#include<iostream>
#include<string>
using namespace std;
#include<stdio.h>
#include<string.h>
int main()
{
string S,S1,S2;
int i=0;
char a;
while(cin>>a)
{
if(a!=',')
{
if(i==0) S+=a;
else if(i==1) S1+=a;
else S2+=a;
}
else i++;
}
int s,s1,s2;
s1=S.find(S1);
s2=S.rfind(S2);
if(s1!=-1&&s2!=-1&&(s1+S1.length()-1)<s2){
cout<<s2-s1-S1.length()<<endl;
}
else cout<<"-1"<<endl;
}
第一次见这个反向查找,长见识了
+1
+1
+10086
好好好这个rfind()直接给我整破防了
+1一个rfind()取代了我十几行代码我真的要b溃了
这里可以用getline(cin,S,’,’);来获取三个字符串
看到别人写的find感觉自己写的东西像小丑了
我也是这个思路,可惜有些小细节没把握好。用了给的数据才AC
(s1+S1.length()-1)<s2)
这个条件为什么要满足啊,这就一句没看懂
画个图就好理解了,前面括号里面是是s1的最后一个字符下标
如果s1,s2,s里有很多个怎么办find哪个
find返回找到的第一个的地址,要的是最长,所以要第一个就行了
牛的
这个代码感觉没有考虑s1整体出现在s2右边的情况(即出现交叉的情况),看题目的答案,题目表述的不交叉,应该理解为没有重叠区域。
这里特判了的:s1+S1.length()-1<s2
一个大大的赞!!!
条件改成这样也对
if(s1!=-1&&s2!=-1&&(s1+S1.length()-1)<s2){
cout<<s2-s1-S1.length()<<endl;
这句啥意思?
同问
(s1!=-1&&s2!=-1&&(s1+S1.length()-1)<s2) 是为了 两个元素位置都可以找到 并且 s1 和 s2 满足 s1 在 s2 的左边
“return 0;”呢?
s有啥用
同问。
为什么最后输出结果的length不用-1
s1+S1.length()-1是字符串S1的结尾的下标,s2是字符串S2的开头下标。
s2-s1-S1.length()是两个字符串中间字符的数目
你可以自己写个例子就知道了