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; } |