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

文章描述了一种处理坏键问题的算法,即当键盘的Home或End键出现问题,导致文本输入时自动触发时,如何通过链表数据结构来重构正确的文本。程序通过读取输入的文本行,遇到[]字符时,将链表的迭代器移动到相应位置,从而实现文本的修正。
摘要由CSDN通过智能技术生成

你正在用坏了的键盘键入一段很长的文本。嗯,它没那么坏。唯一的问题
使用键盘时,有时会自动按下“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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值