原代码
#include <algorithm>
#include<bits/stdc++.h>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
// 若之前cin以换行结束, getline(cin ,s)会先读取空格
// 积累 s.append() 在 s后面加后缀。
// 使用stringstream 将字符串转换为数字, 连续使用时 要加上ss.clear() 和 ss.str() 去清空字符流
int findSubstring(string s , string s1){
int len = s.length() , len1 = s1.length();
int i = 0 , j =0 ,k = 0;
while(i < len && j < len1){
k = i+1;
bool flag = false;
for(int u = 0 ; u < s1.length() ;u++,i++){
if(s1[u] != s[i]){
flag = true;
i = k;
break;
}
}
if(!flag) return i-len1;
}
return -1;
}
int main(){
int q , a, b;
cin >> q;
string s ,s1;
cin >> s;
int option;
while(q--){
cin >> option;
if(option == 1){
cin >> s1;
s.append(s1);
cout << s << "\n";
}else if(option == 2){
cin >> a >> b;
s1 = s;
s = "";
for(int i = a ;i < a+b ;i++){
s+=s1[i];
}
cout << s << "\n";
}else if(option == 3){
cin >> a >> s1;
string s2 = "";
for(int i = a; i < s.length() ;i++){
s2 += s[i];
}
for(int i = a, j =0 ; i< a+s1.length() ;i++,j++){
s[i] = s1[j];
if(i>=s.length()) s += s1[j];
}
s.append(s2);
cout << s<<"\n";
}else if(option == 4){
cin >> s1;
bool falg = false;
cout << findSubstring(s ,s1)<<"\n";
}
}
return 0;
}
补充了一个逻辑
#include <algorithm>
#include<bits/stdc++.h>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
// 若之前cin以换行结束, getline(cin ,s)会先读取空格
// 积累 s.append() 在 s后面加后缀。
// 使用stringstream 将字符串转换为数字, 连续使用时 要加上ss.clear() 和 ss.str() 去清空字符流
int findSubstring(string s , string s1){
int len = s.length() , len1 = s1.length();
int i = 0 , j =0 ,k = 0;
while(i < len && j < len1){
k = i+1;
bool flag = false;
for(int u = 0 ; u < s1.length() ;u++,i++){
if(s1[u] != s[i]){
flag = true;
i = k;
break;
}
}
if(!flag) return i-len1;
}
return -1;
}
int main(){
int q , a, b;
cin >> q;
string s ,s1;
cin >> s;
int option;
while(q--){
cin >> option;
if(option == 1){
cin >> s1;
s.append(s1);
cout << s << "\n";
}else if(option == 2){
cin >> a >> b;
s1 = s;
s = "";
for(int i = a ;i < a+b ;i++){
s+=s1[i];
}
cout << s << "\n";
}else if(option == 3){
cin >> a >> s1;
string s2 = "";
for(int i = a; i < s.length() ;i++){
s2 += s[i];
}
//cout << s << endl;
for(int i = a, j =0 ; i< a+s1.length();i++,j++){
s[i] = s1[j];
if(i>=s.length()) s += s1[j];
}
if(a+s1.length() < s.length()){
for(int i = a+s1.length(),j=0 ;i < a+s1.length()+s2.length();i++,j++){
s[i] =s2[j];
if(i > s.length()) s+=s2[j];
}
}
else{
s.append(s2);
}
cout << s<<"\n";
}else if(option == 4){
cin >> s1;
bool falg = false;
cout << findSubstring(s ,s1)<<"\n";
}
}
return 0;
}
样例三我也下载下来了
in:
4
@@@111aaabbbccc
1 ~~~
4 @1
3 0 23333
2 4 5
out:
@@@111aaabbbccc~~~
2
23333@@@111aaabbbccc~~~
3@@@1
还是WA