编辑
现在给出一段全是字符序列的文章。光标可以被安置在文章的内部(任何两个连续的字符中间),或在开头(第一个字符的左边),或在结尾(最后一个字符的右边)。要求在文章中执行一系列的操作。可能的操作如下:
L:将光标左移一个字符(如果光标在开头,则不用做任何操作)
D:将光标右移一个字符(如果光标在结尾,则不用做任何操作)
B:删除光标左边的一个字符(如果光标在开头,则不用做任何操作)
P $:在光标的右边插入字符$($可以是英文字母表中的任何一个小写字母)
在执行给定的操作前,光标在课文的结尾处
编写一个程序,确定在执行完给定的操作后,文章看起来是什么样子
输入的第一行是一篇文章,文章中只包括小写的英文字母,并且长度不超过100000个字符。
下一行是一个整数N,1<=N<=500000,表示给定的操作数
接下来的N行,是按执行顺序给定的各个操作
输出一行,应输出执行完给定的各个操作后的文章
11
B
B
P x
L
B
B
B
P y
D
D
P z
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
char b;
int n,i;
cin>>a;
cin>>n;
int len=a.size();
int gb=len;
for(i=1;i<=n;i++)
{
cin>>b;
if(b=='L')
{
if(gb!=0)
{
gb--;
}
}
else if(b=='D')
{
if(gb!=len)
{
gb++;
}
}
else if(b=='B')
{
if(gb==len)
{
a.erase(gb-1,1);
len--;
gb=gb-1;
}
else if(gb!=0)
{
a.erase(gb-1,1);
len--;
gb=gb-1;
}
}
else if(b=='P')
{
string t;
cin>>t;
if(gb==len)
{
a=a+t;
len++;
gb++;
}
else
{
if(gb==0)
{
a.insert(gb,t);
len++;
gb++;
}
else
{
a.insert(gb,t);
len++;
gb++;
}
}
}
}
cout<<a;
return 0;
}
------------恢复内容开始------------
现在给出一段全是字符序列的文章。光标可以被安置在文章的内部(任何两个连续的字符中间),或在开头(第一个字符的左边),或在结尾(最后一个字符的右边)。要求在文章中执行一系列的操作。可能的操作如下:
L:将光标左移一个字符(如果光标在开头,则不用做任何操作)
D:将光标右移一个字符(如果光标在结尾,则不用做任何操作)
B:删除光标左边的一个字符(如果光标在开头,则不用做任何操作)
P $:在光标的右边插入字符$($可以是英文字母表中的任何一个小写字母)
在执行给定的操作前,光标在课文的结尾处
编写一个程序,确定在执行完给定的操作后,文章看起来是什么样子
输入的第一行是一篇文章,文章中只包括小写的英文字母,并且长度不超过100000个字符。
下一行是一个整数N,1<=N<=500000,表示给定的操作数
接下来的N行,是按执行顺序给定的各个操作
输出一行,应输出执行完给定的各个操作后的文章
11
B
B
P x
L
B
B
B
P y
D
D
P z
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
char b;
int n,i;
cin>>a;
cin>>n;
int len=a.size();
int gb=len;
for(i=1;i<=n;i++)
{
cin>>b;
if(b=='L')
{
if(gb!=0)
{
gb--;
}
}
else if(b=='D')
{
if(gb!=len)
{
gb++;
}
}
else if(b=='B')
{
if(gb==len)
{
a.erase(gb-1,1);
len--;
gb=gb-1;
}
else if(gb!=0)
{
a.erase(gb-1,1);
len--;
gb=gb-1;
}
}
else if(b=='P')
{
string t;
cin>>t;
if(gb==len)
{
a=a+t;
len++;
gb++;
}
else
{
if(gb==0)
{
a.insert(gb,t);
len++;
gb++;
}
else
{
a.insert(gb,t);
len++;
gb++;
}
}
}
}
cout<<a;
return 0;
}
------------恢复内容结束------------