【机试备考】Day14-复制、剪切、粘贴 | string的插入和删除

题目

BUPT 2016 计算机 ProblemD
有以下三种操作。

(1)COPY l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列复制到剪贴板t里面,覆盖t字符串。

例如s为abcde t为pqr

执行COPY 1 2变为

s为abcde t为bc

(2)CUT l r(0<=l<=r<n),n代表s串的长度。这个表示将s串从l到r的序列剪切到剪贴板t里面(删除s串中的l到r的序列),覆盖t字符串。

例如s为abcde t为pqr

执行CUT 1 2变为

s为ade t为bc

(3)PASTE p(0<=p<n),n代表s串的长度。这个表示将t串插入到s串p位置的后面。t保持不变。

例如s为abcde t为pqr

执行PASTE 1 变为

s为abpqrcde

t为pqr

输入描述

多组测试数据。
首先给你s串,再给你一个m,然后给你m个操作。

输出描述

对每个操作,输出操作后的s串。

示例

输入

abcde
5
CUT 1 2
COPY 0 1
PASTE 1
PASTE 1
CUT 1 3

输出

ade
ade
adade
adadade
aade

题解

这很北邮,出过好几次string的题了,这道题主要用的函数有三个:substr() , erase() 和 insert(),就按照他说的调用相应的库函数就好了,很简单

#include<iostream>
#include<string>
using namespace std;
int main()
{
    
    
    int n;
    string s;
    while(cin>>s)
    {
    
    
        cin>>n;
        string t,cmd;//t代表剪贴板
        for(int i=0;i<n;i++)
        {
    
    
            cin>>cmd;
            int l,r;
            if(cmd=="CUT")
            {
    
    
                scanf("%d%d",&l,&r);
                t=s.substr(l,r-l+1);//取剪切的子串放入t
                s=s.erase(l,r-l+1);//s删除剪切的部分

            }
            else if(cmd=="COPY")
            {
    
    
                scanf("%d%d",&l,&r);
                t=s.substr(l,r-l+1);//取剪切的子串放入t
            }
            else
            {
    
    
                scanf("%d",&l);
                s=s.insert(l+1,t);//insert默认插入在pos前,+1才能插入到pos后
            }
            cout<<s<<endl;
        }
    }
}

小结

insert()还不太熟,在这里记录一下

只写了最简单最常用的用法,怕看多了该乱了

insert()用法

c++/string/insert

重点记一下这个pos代表什么,口诀:下标前个数后

s="012345";

//在s[2]前面插入"iii",也可以想成在第2个字符后面插入"iii"
s.insert(2,"iii");//s="01iii2345"

猜你喜欢

转载自blog.csdn.net/qq_43417265/article/details/113523781
今日推荐