首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >DS堆栈--行编辑 C++

DS堆栈--行编辑 C++

作者头像
叶茂林
发布2023-07-30 11:29:37
发布2023-07-30 11:29:37
4390
举报

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

题目描述

使用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代码 

代码语言:javascript
复制
#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;
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 思路分析
  • AC代码 
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档