string类型的长度size()与length()方法返回的都是无符号整型
使用string的find与rfind
#include <iostream>
#include <cstring>
using namespace std;
int main(){
string tmp, s[3];
cin >> tmp;
s[0] = s[1] = s[2] = "";
int id = 0;
for(int i = 0; i < tmp.size(); i ++ ){
if(tmp[i] == ','){
id ++ ;
continue;
}
s[id] += tmp[i];
}
int l, r;
l = s[0].find(s[1]);
r = s[0].rfind(s[2]);
if(l != -1 && r != -1 && r - (l + int(s[1].length())) > 0)
cout << r - (l + int(s[1].length())) << endl;
else cout << -1 << endl;
return 0;
}
不知道的情况下模拟一下也可以做
#include <iostream>
using namespace std;
int main(){
string tmp, s[3];
cin >> tmp;
s[0] = s[1] = s[2] = "";
int id = 0;
for(int i = 0; i < tmp.size(); i ++ ){
if(tmp[i] == ','){
id ++ ;
continue;
}
s[id] += tmp[i];
}
int l = -1;
for(int i = 0; i < s[0].size(); i ++ ){
if(s[0][i] == s[1][0]){
int j = 0;
while(j < s[1].size() && s[0][j + i] == s[1][j]) j ++ ;
if(j == s[1].size()){
l = i;
break;
}
}
}
if(l < 0) cout << -1 << endl;
else{
int r = -1;
for(int i = s[0].size() - 1; i >= 0; i -- ){
if(s[0][i] == s[2][s[2].size() - 1]){
int j = s[2].size() - 1;
while(j >= 0 && s[0][i + j - s[2].size() + 1] == s[2][j]) j -- ;
if(j < 0){
r = i;
break;
}
}
}
int len = r - int(s[2].size()) - (l + int(s[1].size())) + 1;
if(r < 0) cout << -1 << endl;
else if(len <= 0) cout << -1 << endl;
else cout << len << endl;
}
return 0;
}