P5734 【深基6.例6】文字处理软件

题目描述

你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 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。

解题思路

  1. 变量定义
    • n:用于存储操作次数。
    • qwq:用于存储初始文档和后续操作修改后的文档。
    • a:用于存储操作类型(1为后接插入,2为截取文档部分,3为插入片段,4为查找子串)。
    • bc:用于存储操作中的参数(如截取起始位置、截取长度、插入位置等)。
    • b1c1:临时字符串,用于存储输入或中间结果。
  2. 循环处理
    • 通过for循环处理每个操作。
    • 根据a的值判断操作类型,并执行相应的操作。
  3. 操作执行
    • 对于后接插入(a == 1),使用+=运算符在文档末尾添加字符串。
    • 对于截取文档部分(a == 2),使用substr函数截取指定位置和长度的字符串,并更新文档。
    • 对于插入片段(a == 3),使用insert函数在指定位置插入字符串。
    • 对于查找子串(a == 4),使用find函数查找字符串在文档中的位置,如果找到则返回位置,否则返回string::npos,并输出-1
  4. 输出
    • 根据操作类型输出相应的结果。对于操作1、2、3,输出修改后的文档;对于操作4,输出字符串的起始位置或-1

示例代码

#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;  
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值