描述
从键盘输入一个字符串(长度<=40个字符),并以字符 '.'结束。
例如:'This is a book.' 现对该字符串进行编辑,编辑功能有:
D:删除一个字符,命令的方式为:
D a 其中a为被删除的字符
例如:D s 表示删除字符 's' ,若字符串中有多个 's',则删除第一次出现的。
如上例中删除的结果为: 'Thi is a book.'
I:插入一个字符,命令的格式为:
I a1 a2 其中a1表示插入到指定字符前面,a2表示将要插入的字符。
例如:I s d 表示在指定字符 's' 的前面插入字符 'd' ,若原串中有多个 's' ,则插入在最后一个字符的前面。
如上例中:
原串:'This is a book.'
插入后:'This ids a book.'
R:替换一个字符,命令格式为:
R a1 a2 其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
例如: 原串: 'This is a book.'
输入命令:R o e
替换后的字符串为:'This is a beek.'
在编辑过程中,若出现被改的字符不存在时,则给出提示信息"Not exist"。
输入
每个测试文件只包含一组测试数据,每组输入数据包含两行:
第一行,输入一个字符串,表示原串;
第二行,输入一个字符串,表示命令。
输出
对于每组输入数据,输出编辑后的字符串,如果被改的字符不存在,则输出"Not exist"(引号不输出)。
输入样例 1
This is a book.
D s
输出样例 1
Thi is a book.
题目说法是修改字符串,这种情况有两种办法1、去修改,2、不修改遇到特殊情况的时候特殊输出,二者都会有两次遍历,第一种相对更加复杂,需要增删改,第二种其实仅仅只是修改了输出规则相对来说更简单,所以我选择的是第二种,首先我们使用getline输入数据,然后先输入指令,再根据指令选择要输入几个数据,如果遇到了D那么输入被删除的数,先遍历数组查看是否存在,存在则跳出,这样根据遍历跳出的位置可以判断是否存在,然后可以使用一个jug变量保证这是第一个,对其初始化然后遇到了要删除的数据,并且jug依然是初始化就跳过这一次输入,同时jug改变。对于I也是先判断存在,这次是倒序遍历,如果存在记下位置并跳出,然后输出的时候遍历到那个位置就多输出一个即可,对于R就是先判断存在,存在再继续遍历遇到要替换的直接替换即可。
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
string s;
getline(cin,s);
char cmd,x,y,len=s.size();
cin>>cmd;
if(cmd=='D')
{
cin>>x;
int i,t=0,jug=0;
for(i=0; i<len; i++)
if(s[i]==x)
break;
if(i>=len)
cout<<"Not exist"<<endl;
else
{
for(i=0; i<len; i++)
{
if(s[i]==x&&jug==0)
{
jug=1;
continue;
}
cout<<s[i];
}
cout<<endl;
}
}
else if(cmd=='I')
{
cin>>x>>y;
int i,t;
for(i=len; i>=0; i--)
if(s[i]==x)
{
t=i;
break;
}
if(i<0)
cout<<"Not exist"<<endl;
else
{
for(int i=0; i<len; i++)
{
if(i==t)
{
cout<<y<<x;
continue;
}
cout<<s[i];
}
cout<<endl;
}
}
else if(cmd=='R')
{
int i,jug=0;
cin>>x>>y;
for(i=0; i<len; i++)
if(s[i]==x)
break;
if(i>=len)
cout<<"Not exist"<<endl;
else
{
for(int i=0; i<len; i++)
{
if(s[i]==x)
s[i]=y;
cout<<s[i];
}
cout<<endl;
}
}
return 0;
}