【UVA 11988】Broken Keyboard 题解(链表)

你正在用坏了的键盘键入一段很长的文本。嗯,它没那么坏。唯一的问题
使用键盘时,有时会自动按下“home”键或“end”键
(内部)。
你没有意识到这个问题,因为你专注于文本,甚至没有打开
班长完成键入后,您可以在屏幕上看到文本(如果打开显示器)。
在中文里,我们可以称之为北居。你的任务是找到悲剧文本。

输入
有几个测试用例。每个测试用例都是一行,至少包含一个,最多包含100000个
字母、下划线和两个特殊字符“[”和“]”['表示按下“Home”键
内部,“]”表示内部按下“结束”键。输入在文件结束时终止
(共页)。
输出
对于每种情况,在屏幕上打印悲剧文本。

Sample Input
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
Sample Output
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University

思路

用一个链表存储输入的字符,遇到 [ 就将迭代器指向链表开头,遇到 ] 就将迭代器指向链表结尾。

AC代码

#include <iostream>
#include <cstdio>
#include <list>
#include <algorithm>
#include <sstream>
#define AUTHOR "HEX9CF"
using namespace std;

list<char> l;

int main()
{
    char ch;
    string line;
    list<char>::iterator it;
    while (getline(cin, line))
    {
        stringstream ss(line);
        for (it = l.begin(); ss >> ch;)
        {
            if ('[' == ch)
            {
                it = l.begin();
                continue;
            }
            if (']' == ch)
            {
                it = l.end();
                continue;
            }
            l.insert(it, ch);
        }
        for (it = l.begin(); it != l.end(); it++)
        {
            cout << *it;
        }
        cout << endl;
        l.clear();
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值