用STL最烦人的就是一个成员函数有多个重载版本,到底是写下标还是迭代器(一般不能同时出现在参数列表里),到底是一个参数还是两个参数等,希望熟练后有所改善
// #include <iostream>
// #include <string>
// #include <algorithm>
// using namespace std;
// // 翻转字符串的指定部分
// void reverseSubstring(string &s, int i, int len) {
// reverse(s.begin() + i, s.begin() + i + len);
// }
// // 替换字符串的指定部分
// void replaceSubstring(string &s, int i, int len, const string &replacement) {
// s.replace(i, len, replacement);
// }
// int main() {
// string s;
// while (cin >> s) { // 读取每组数据的字符串
// int n;
// cin >> n; // 读取命令数量
// while (n--) {
// string command;
// cin >> command; // 读取命令
// int type = command[0] - '0'; // 命令类型(0或1)
// int i = command[1] - '0'; // 起始下标
// int len = command[2] - '0'; // 操作长度
// if (type == 0) {
// // 翻转操作
// reverseSubstring(s, i, len);
// }
// else if (type == 1) {
// // 替换操作
// string replacement = command.substr(3); // 提取替换字符串
// replaceSubstring(s, i, len, replacement);
// }
// // 输出每次操作后的字符串
// cout << s << endl;
// }
// }
// return 0;
// }
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string str;
int n;
cin >> str >> n;
while (n--) {
string op;
cin >> op;
int begin = op[1] - '0';// 起始下标
int len = op[2] - '0'; // 要操作的字符串长度
if (op[0] == '0') { // 翻转,将首尾迭代器范围内左闭右开的字符全部翻转
reverse(str.begin() + begin, str.begin() + begin + len);
}
else if (op[0] == '1') { // 替换,第一个参数写要替换的起始下标,第二个参数写长度,第三个参数写目标字符串
str.replace(begin, len, op.substr(3));
}
cout << str << endl;
}
return 0;
}

京公网安备 11010502036488号