zoukankan      html  css  js  c++  java
  • 牛客小白D题(STL的迭代器)

    「只要我拉动绳线,你就得随之起舞。」          ——泰兹瑞


           泰兹瑞来到卡拉德许之后,由于他精湛的神器制造技术,可谓是过的如鱼得水。这次,他为自己打造了一个编辑器,称为威穆(Veim)。操作威穆时,有两种模式,具体操作如下。

    Normal Mode
    - 按下 i :进入 Insert Mode
    - 按下 f :紧接着一个小写字母 char,若当前光标后(右)方有至少一个 char ,将光标移动到其所在位置,否则不移动。
    - 按下 x :删除当前光标所在位的字符,后面的字符均会前移一格。
    - 按下 h :将光标向左(前)移动一格,若无法移动就不移动。
    - 按下 l :将光标向右(后)移动一格,若无法移动就不移动。
    - 若按下了其他字符:无任何效果。

    Insert Mode
    - 按下非 e 小写字母 char :在光标当前位置前插入这个字母 char。
    - 按下 e :退出 Insert Mode(进入 Normal Mode)。 

           (具体请见样例)
           现在泰兹瑞的威穆中已经写入了一个字符串 s 。接下去泰兹瑞进行了一波操作(按下了若干按键),他的按键序列为 t 。现给出 s 和 t ,求这波操作之后威穆内留下的字符串。

    输入描述:

    两行,第一行字符串 s ,第二行字符串 t 。

    输出描述:

    一行,威穆里最后留下的字符串。
    示例1

    输入

    复制
    applese
    xfllhlia

    输出

    复制
    pplaese

    说明

    - 初始时,字符串为 
    mathtt{underline{a}pplese}
    ,威穆处于 Normal Mode 。下划线表示光标所在位置。
    - 第一步操作为 x ,删除当前光标所在位的字符,并且光标后移一格。字符串变为
    mathtt{underline{p}plese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 f ,之后跟有一个字符 `l` 。光标后存在字符 `l` ,故移动到该位置。字符串变为
    mathtt{ppunderline{l}ese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 l ,光标后移一格。字符串变为
    mathtt{pplunderline{e}se}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 h ,光标前移一格。字符串变为
    mathtt{ppunderline{l}ese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 l ,光标后移一格。字符串变为
    mathtt{pplunderline{e}se}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 i ,威穆进入 Insert Mode。字符串仍为
    mathtt{pplunderline{e}se}

    - 下一步操作为 a ,而非 e ,故插入字符 a 。字符串变为
    mathtt{pplaunderline{e}se}
    示例2

    输入

    复制
    pppp
    iaefpfpia

    输出

    复制
    appapp

    备注:

    1 ≤ |s|, |t| ≤ 10

    5


    s, t 均由小写拉丁字母组成。


    有点尴尬,当时写了一个双向链表。然后,赛后,用STL写写就过了。
    #include<cstdio>
    #include<list>
    #include<stdio.h>
    using namespace std;
    list<char>ss;
    
    int main()
    {
        char c;
        while (c = getchar(), c != '
    '){
            ss.push_back(c);
        }
        bool flag = 1;
        list<char>::iterator it = ss.begin();
        while (c = getchar(), c != '
    ')
        {
            if (flag)
            {
                switch (c)
                {
                case 'i':{flag = 0; }
                    break;
                case 'f':{
                             char x = getchar();
                             list<char>::iterator ki = ++it;    --it;
                             for (; ki != ss.end(); ++ki){
                                 if (*ki == x){
                                     it = ki; break;
                                 }
                             }
                }
                    break;
                case 'x':{ss.erase(it++); }
                    break;
                case 'h':{--it; if (it == ss.end())++it; }
                    break;
                case 'l':{++it; if (it == ss.begin())--it; }
                    break;
                default:
                    break;
                }
            }
            else{
                if (c == 'e')flag = 1;
                else{
                    ss.insert(it, c);
                }
            }
        }
        for (list<char>::iterator it = ss.begin(); it != ss.end(); ++it)
        {
            printf("%c", *it);
        }
        printf("
    ");
    }
  • 相关阅读:
    c# 三种取整方法 向上取整 向下取整 四舍五入
    Lambda表达式对DataRow处理
    Dapper数据库字段和model属性映射
    union limit
    北邮五十题
    搜索____深搜 学易错点
    动态规划____有重叠子问题的搜索,都可以转为记忆化搜索
    64位 __int 与 long long写法
    做做 卡特兰数 与 卡米歇尔数
    vector 有点麻烦啊 能简单点么?
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9974185.html
Copyright © 2011-2022 走看看