day13--文字处理软件--2.16
习题概述
题目描述
你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 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,根据操作的要求输出一个整数。
代码部分
#include<bits/stdc++.h>
using namespace std;int n,a; //操作次数及类型
string qwq; // 定义初始文档
string c1; // 存储裁剪后的字符串
string b1; // 存储待插入字符串
int b,c,d=-1,e;
int main()
{cin>>n; // 输入操作次数cin>>qwq; // 输入初始文档for(int i=0;i<n;i++) // 循环处理每个操作{cin>>a; //读取操作类型if(a==1) //插入字符串{cin>>b1; // 读取待插入字符串qwq+=b1; // 将字符串 b1 插入到文档尾部cout<<qwq<<endl; // 输出文档}else if(a==2) // 裁剪字符串{cin>>b>>c; // 读取裁剪参数c1=qwq.substr(b,c); // 截取文档中从第 b 个字符起长度为 c 的子串qwq=c1; // 将裁剪后的子串保存到文档中cout<<qwq; // 输出文档cout<<endl;}else if(a==3) // 插入子串{cin>>b>>b1; // 读取插入位置和待插入字符串qwq.insert(b,b1); // 在文档的第 b 个字符前插入字符串 b1cout<<qwq<<endl; // 输出文档}else if(a==4) // 查找子串{cin>>b1; // 读取待查找字符串if(qwq.find(b1)<qwq.size()) // 查找子串在文档中的位置cout<<qwq.find(b1)<<endl; // 如果找到则输出位置elsecout<<-1<<endl; // 否则输出 -1}}return 0;
}
心得体会
1. c1 = qwq.substr(b, c);
这行代码使用了 C++ 标准库中的 substr
函数,其作用是从字符串 qwq
中提取子串,并将得到的子串赋值给 c1
。
具体而言,substr
函数的原型是:string substr (size_t pos, size_t len) const;
·pos
参数表示要提取的子串的起始位置(索引),即从哪个字符开始提取子串。
·len
参数表示要提取的子串的长度,即需要提取多少个字符。
所以,qwq.substr(b, c)
的作用是从字符串 qwq
中的位置 b
处开始提取长度为 c
的子串,并将结果赋值给 c1
。
例如,如果 qwq
是 "Hello, World!",那么 qwq.substr(7, 5)
的结果就是 "World",因为它从索引 7 开始提取长度为 5 的子串。
2. qwq.insert(b, b1)
是 C++ 标准库中的 insert
函数,用于在字符串 qwq
的特定位置插入另一个字符串 b1
。
具体而言,insert
函数的原型是:string insert (size_t pos, const string& str);
·pos
参数表示插入的位置(索引),即在哪个字符前插入字符串。
·str
参数是要插入的字符串。
所以,qwq.insert(b, b1)
的作用是将字符串 b1
插入到字符串 qwq
的位置 b
前面。
例如,如果 qwq
是 "Hello, !",b
是 5,b1
是 "World",那么执行 qwq.insert(5, "World")
后,qwq
的值将变为 "Hello, World!",因为它在索引 5 的位置之前插入了字符串 "World"。
3. if(qwq.find(b1) < qwq.size())
是条件语句,用来判断字符串 b1
是否在字符串 qwq
中出现过。
具体而言,find
函数的原型是:size_t find (const string& str, size_t pos = 0) const;
·str
参数是要查找的字符串。
·pos
参数是查找的起始位置(索引),默认值为 0。
find
函数会在字符串 qwq
中从位置 pos
开始查找字符串 str
,如果找到了,则返回它在字符串中第一次出现的位置(索引),否则返回 string::npos
。string::npos
是一个常量,表示无法找到指定的字符或子串。
因此,if(qwq.find(b1) < qwq.size())
的作用是判断字符串 b1
是否在字符串 qwq
中出现过。如果出现过,则返回其在字符串中第一次出现的位置,并与字符串 qwq
的长度比较大小,如果小于字符串 qwq
的长度,则说明找到了;否则就没有找到。
例如,如果 qwq
是 "Hello, World!",b1
是 "World",那么执行 qwq.find("World")
后,将返回 7,因为子串 "World" 在字符串 qwq
中首次出现的位置是 7。而如果 qwq.find("Java")
,将返回 string::npos
,因为字符串 qwq
中不存在子串 "Java"。