例题6-4 UVA11988 Broken Keyboard(20行AC代码)

本文提供了一道关于字符串操作的算法题的解决方案,题目为UVA11988 Broken Keyboard。文章详细介绍了如何使用C++中的list数据结构来模拟键盘输入行为,包括光标移动到字符串的开始和结束位置,以及在特定位置插入字符。通过代码示例,读者可以了解如何高效地解决此类问题。
摘要由CSDN通过智能技术生成

紫书刷题进行中,题解系列【GitHub|CSDN

例题6-4 UVA11988 Broken Keyboard(20行AC代码)

题目大意

给定字符串,当输入[时,光标移动到首,当输入]时,光标移动到尾,给出移动后的字符串

思路分析

链表的插入模拟,list可轻松实现,详见代码注释

若想手动实现,静态链表和动态链表均可,注意开头和结尾的处理

AC代码(C++11,list)

#include<bits/stdc++.h>
using namespace std;
string s;
int main() {
    while (cin >>s) {
        list<char> l;
        auto p = l.begin(); // 初始化
        for (auto ch : s) {
            if (ch == '[') p = l.begin(); // 开头
            else if (ch == ']') p = l.end(); // 结尾
            else {
                p = l.insert(p, ch); // 返回插入数据的迭代器
                p ++; // 后移一位
            }
        }
        for (auto ch : l) cout <<ch; // 输出
        puts("");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值