DS堆栈--行编辑 C++

发布于:2022-12-03 ⋅ 阅读:(447) ⋅ 点赞:(0)

温馨提示:本题为深大OJ原题,深大的同学请勿直接抄袭,以免出现多个代码相同以致评0分的情况,代码和思路仅供参考,希望大家能逐步成长。

目录

题目描述

思路分析

AC代码 


题目描述

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

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

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

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

输入

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

输出

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

输入样例1 

4
chinaa#
sb#zb#u
##shen###zhen###
chi##a#####

输出样例1

china
szu
sz
NULL

输入样例2 

1
###############################################################################################

输出样例2

NULL

思路分析

简单讲讲思路:

首先是创建一个char型的栈和一个string类型的字符串,每次读取字符串之后呢就用for范围循环把字符串里面的字符依次压入栈,注意到需要在压栈的时候进行条件判断,如果不是#就压入栈,如果是#号并且栈非空就弹栈,因为有可能一开始就退格,所以需要判断在栈非空的情况下弹栈。

接下来是正序输出的问题,完全可以再创建一个栈变量,然后把它装进去,再遍历输出来完事,我这里直接使用之前的字符串实现,先把字符串清空,然后遍历栈,将栈顶元素插入字符串的首位,这样就倒序了。

AC代码 

#include<bits/stdc++.h>
using namespace std;
int main() {
	int t;
	cin >> t;
	while (t--) {
		stack<char>test;
		string temp;
		cin >> temp;
		for (auto&it : temp) {
			if (it != '#')
				test.push(it);
			else if (!test.empty())
				test.pop();
		}
		temp.clear();
		if (test.empty())
			cout << "NULL" << endl;
		else
			while (!test.empty()) {
				temp.insert(temp.begin(),test.top());
				test.pop();
			}
		cout<<temp << endl;
	}
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到