跳转至

DS堆栈--行编辑

时间限制: 1 Sec 内存限制: 128 MB

题目描述

使用C++的STL堆栈对象,编写程序实现行编辑功能。行编辑功能是:当输入#字符,则执行退格操作;如果无字符可退就不操作,不会报错

本程序默认不会显示#字符,所以连续输入多个#表示连续执行多次退格操作

每输入一行字符打回车则表示字符串结束

注意:必须使用堆栈实现,而且结果必须是正序输出

输入

第一行输入一个整数t,表示有t行字符串要输入

第二行起输入一行字符串,共输入t行

输出

每行输出最终处理后的结果,如果一行输入的字符串经过处理后没有字符输出,则直接输出NULL

样例输入

1
2
3
4
5
4
chinaa#
sb#zb#u
##shen###zhen###
chi##a#####

样例输出

1
2
3
4
china
szu
sz
NULL

提示

解决方案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <stack>

void reversePrint(std::stack<char> &stack) {
    if (!stack.empty()) {
        char ch = stack.top();
        stack.pop();
        reversePrint(stack);
        std::cout << ch;
    }
}

int main() {
    int ctrl;
    std::cin >> ctrl;

    while (ctrl--) {
        std::string seq;
        std::cin >> seq;
        std::stack<char> stack;
        for (size_t i = 0; i < seq.length(); ++i) {
            if (seq[i] == '#') {
                if (!stack.empty()) {
                    stack.pop();
                }
            } else {
                stack.push(seq[i]);
            }
        }
        if (stack.empty()) {
            std::cout << "NULL" << std::endl;
        } else {
            if (stack.empty()) {
                std::cout << "NULL" << std::endl;
            } else {
                reversePrint(stack);
                std::cout << std::endl;
            }
        }
    }

    return 0;
}

评论