题目描述
你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 0 个字符。需要支持以下操作:
1 str
:后接插入,在文档后面插入字符串 str,并输出文档的字符串;2 a b
:截取文档部分,只保留文档中从第 a 个字符起 b 个字符,并输出文档的字符串;3 a str
:插入片段,在文档中第a 个字符前面插入字符串 str,并输出文档的字符串;4 str
:查找子串,查找字符串 str 在文档中最先的位置并输出;如果找不到输出 −1。
为了简化问题,规定初始的文档和每次操作中的 str 都不含有空格或换行。最多会有 q 次操作。
输入格式
第一行输入一个正整数 q,表示操作次数。
第二行输入一个字符串 str,表示最开始的字符串。
第三行开始,往下 q 行,每行表示一个操作,操作如题目描述所示。
输出格式
一共输出 q 行。
对于每个操作 1,2,3根据操作的要求输出一个字符串。
对于操作 4根据操作的要求输出一个整数。
输入输出样例
输入 #1复制
4 ILove 1 Luogu 2 5 5 3 3 guGugu 4 gu
输出 #1复制
ILoveLuogu Luogu LuoguGugugu 3
说明/提示
数据保证,1≤q≤100,开始的字符串长度 ≤100。
解题思路
- 变量定义:
n
:用于存储操作次数。qwq
:用于存储初始文档和后续操作修改后的文档。a
:用于存储操作类型(1为后接插入,2为截取文档部分,3为插入片段,4为查找子串)。b
,c
:用于存储操作中的参数(如截取起始位置、截取长度、插入位置等)。b1
,c1
:临时字符串,用于存储输入或中间结果。
- 循环处理:
- 通过
for
循环处理每个操作。 - 根据
a
的值判断操作类型,并执行相应的操作。
- 通过
- 操作执行:
- 对于后接插入(
a == 1
),使用+=
运算符在文档末尾添加字符串。 - 对于截取文档部分(
a == 2
),使用substr
函数截取指定位置和长度的字符串,并更新文档。 - 对于插入片段(
a == 3
),使用insert
函数在指定位置插入字符串。 - 对于查找子串(
a == 4
),使用find
函数查找字符串在文档中的位置,如果找到则返回位置,否则返回string::npos
,并输出-1
。
- 对于后接插入(
- 输出:
- 根据操作类型输出相应的结果。对于操作1、2、3,输出修改后的文档;对于操作4,输出字符串的起始位置或
-1
。
- 根据操作类型输出相应的结果。对于操作1、2、3,输出修改后的文档;对于操作4,输出字符串的起始位置或
示例代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int n; // 用于存储操作次数
string qwq; // 用于存储初始文档和后续操作修改后的文档
cin >> n; // 读取操作次数
cin >> qwq; // 读取初始文档
for(int i = 0; i < n; i++) {
int a; // 用于存储操作类型
cin >> a; // 读取操作类型
if(a == 1) {
string b1; // 用于存储要插入的字符串
cin >> b1; // 读取要插入的字符串
qwq += b1; // 在文档末尾插入字符串
cout << qwq << endl; // 输出当前文档
} else if(a == 2) {
int b, c; // 分别用于存储截取起始位置和截取长度
cin >> b >> c; // 读取截取起始位置和截取长度
string c1 = qwq.substr(b, c); // 从文档中截取指定长度的字符串
qwq = c1; // 只保留截取的字符串,相当于修改了文档
cout << qwq << endl; // 输出修改后的文档
} else if(a == 3) {
int b; // 用于存储插入位置
string b1; // 用于存储要插入的字符串
cin >> b >> b1; // 读取插入位置和要插入的字符串
qwq.insert(b, b1); // 在指定位置插入字符串
cout << qwq << endl; // 输出修改后的文档
} else if(a == 4) {
string b1; // 用于存储要查找的字符串
cin >> b1; // 读取要查找的字符串
int position = qwq.find(b1); // 查找字符串在文档中的位置
if(position != string::npos) { // 如果找到了字符串
cout << position << endl; // 输出字符串的起始位置
} else {
cout << -1 << endl; // 如果没有找到,输出-1
}
}
}
return 0;
}