DS实验题 word
题目:


代码:
//
// main.cpp
// word
//
// Created by wasdns on 16/11/11.
// Copyright © 2016年 wasdns. All rights reserved.
//
#include <iostream>
#include <string>
#include <string.h>
#include <cstdio>
#include <stack>
#include <cstdlib>
using namespace std;
string store[10005]; //存储输出的字符串
/*
输出函数PrintStack:
先将栈中元素存到store数组中,再逆序输出数组中元素。
*/
void PrintStack(stack<string> ins)
{
int cnt = 1;
while (!ins.empty()) {
store[cnt++] = ins.top();
ins.pop();
}
for (int i = cnt-1; i > 0; i--) {
cout << store[i] << " ";
}
cout << endl;
}
int main()
{
int i, n;
stack<string> ins, temp; //字符串栈,ins为题目中的word栈
//temp为被ctrl+z操作弹出的字符串
cin >> n;
getchar();
for (i = 0; i < n; i++)
{
string statement; //输入的字符串
cin >> statement;
if (statement == "ctrl+z") //当字符串为ctrl+z时
{
if (!ins.empty()) { //且ins栈不为空时
temp.push(ins.top());
ins.pop(); //从ins栈中弹出一个字符串并压入temp
continue;
}
}
else if (statement == "ctrl+y") //当字符串为ctrl+y时
{
if (!temp.empty()) { //且temp栈不为空的时候
ins.push(temp.top());
temp.pop(); //从temp栈中弹出一个字符串并压入ins
}
else continue;
}
else if (statement[0] == 'i') //当进行input操作时
{
string str;
cin >> str;
ins.push(str); //将字符串压入ins栈
while (!temp.empty()) { //按照题目要求,将temp栈清空
temp.pop();
}
}
}
//输出:
if (ins.empty())
cout << "No output" << endl;
else
PrintStack(ins);
return 0;
}
结果:

结论:
这道题目,逻辑主线相对较为清晰,但是需要注意对状态的保存(需要再维护一个栈,保存delete操作弹出的字符串)。
之前没有AC的原因也是因为忽略了上面这一点,只对最近一次弹出的字符串进行保存,一旦出现如下情况:
6
input a
input b
ctrl+z
ctrl+z
ctrl+y
ctrl+y
输出为b,但是正确的答案应该是b a
2016/11/11
DS实验题 word的更多相关文章
- DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
- DS实验题 Old_Driver UnionFindSet结构 指针实现邻接表存储
题目见前文:DS实验题 Old_Driver UnionFindSet结构 这里使用邻接表存储敌人之间的关系,邻接表用指针实现: // // main.cpp // Old_Driver3 // // ...
- DS实验题 Dijkstra算法
参考:Dijkstra算法 数据结构来到了图论这一章节,网络中的路由算法基本都和图论相关.于是在拿到DS的实验题的时候,决定看下久负盛名的Dijkstra算法. Dijkstra的经典应用是开放最短路 ...
- DS实验题 sights
算法与数据结构实验题 6.3 sights ★实验任务 美丽的小风姑娘打算去旅游散心,她走进了一座山,发现这座山有 n 个景点, 由于山路难修,所以施工队只修了最少条的路,来保证 n 个景点联通,娇弱 ...
- DS实验题 order
算法与数据结构 实验题 6.4 order ★实验任务 给出一棵二叉树的中序遍历和每个节点的父节点,求这棵二叉树的先序和后序遍历. ★数据输入 输入第一行为一个正整数n表示二叉树的节点数目,节点编号从 ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- DS实验题 Inversion
题目: 解题过程: 第一次做这题的时候,很自然的想到了冒泡和选择,我交的代码是用选择写的.基本全WA(摊手). 贴上第一次的代码: // // main.cpp // sequenceschange ...
- DS实验题 Missile
题目: 提示:并没有精度问题. 原题 NOIP2010 导弹拦截 思路 设源点为A(x1, y1)和B(x2, y2). 第一步,用结构体存节点,包括以下元素: 1.横坐标x 2.纵坐标y 3.节点和 ...
- DS实验题 击鼓传花
题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ...
随机推荐
- 一个非常简单的返回局部字符数组的C语言程序, 请问其输出结果?
以下是该无聊的程序: #include <stdio.h> #include <string.h> char* get_str() { int x[10]; c ...
- LogBack sl4j 通过MDC实现日志记录区分用户Session[以Spring mvc为例]
1.首先实现一个interceptor,在请求开始的时候MDC put一个Session标志,interceptor结束的时候remove掉 import javax.servlet.http.H ...
- PHP站内搜索:多关键字、加亮显示
一.SQL语句中的模糊查找 主要通过LIKE(不区分大小写)关键字实现模糊查找.LIKE条件一般用在指定搜索某字段的时候, 通过"%"或者" _" ...
- Web应用你加盐了吗?——浅谈MD5加密算法中的加盐值(SALT)
转自:http://blog.csdn.net/blade2001/article/details/6341078 我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散 ...
- "回复 集赞" 抢 《Apple Watch 苹果开发教程》活动开始了!!!
"回复 集赞" 抢 <Apple Watch 苹果开发教程>活动开始了!!! 活动方式: 回复积赞 第1步:回复该帖 扫描二维码进入活动现场 第2步:召集你的小 ...
- JavaScript------事件委托(event delegation)
简单的说,事件委托(event delegation)是在DOM上层(也就是在触发事件的元素的父元素上)定义事件的处理程序,而不是定义在触发事件的元素本身上. 首先我们来举这样一个例子:我有N个li元 ...
- Codeforces Round #331 (Div. 2)
水 A - Wilbur and Swimming Pool 自从打完北京区域赛,对矩形有种莫名的恐惧.. #include <bits/stdc++.h> using namespace ...
- 递推DP URAL 1225 Flags
题目传送门 /* 1 r; 2 b; 3 w 2不能在最前面,所以dp[1] = 2; dp[2] = 2: 13 or 31 dp[i] = dp[i-1] + dp[i-2]; 只加1或3时,总数 ...
- DP VK Cup 2012 Qualification Round D. Palindrome pairs
题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...
- POJ3493 Largest Submatrix of All 1’s(单调栈)
题目给一个01矩阵,求最大的1子矩阵. 先用dp预处理出每一行的每一列的1能向上按连续的1延伸多少,然后枚举每一行作为子矩阵的底,那样对于每一行的答案就是POJ2559这个经典问题了. #includ ...