OJ 1256 字符串编辑

描述

从键盘输入一个字符串(长度<=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;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值