【题目要求】输入若干串字符,每次遇到换行符’\n’时,则输出本行当前处理结果。输入时以“#”字符作为结束符,当遇到这个符号后,意味着字符串输入结束。 在输入过程中如果输入“<”,则表示回退一格;在输入过程中如果包含了“@”,则表示回退到本行行首。
【提示】 (1)这道题目利用定义的Stack类实现。输入字符时不要采用cin>>ch;的方式接收字符串,因为cin会屏蔽换行符,不能达到预期的效果。可以考虑采用ch=getchar();或cin.get();语句接收字符。在处理字符串时,要分别对’<’,’@’,’#’,’\n’进行不同的处理。 (2)可以在Stack类中增加两个成员函数,方便调用和显示: void displayFromBottom();//从栈底到栈顶显示栈中的元素。

- #include
- using namespace std;
-
- class Stack {
- private:
- int size;
- char* stackArray;
- int top;
- public:
- Stack(int s) {
- size = s;
- stackArray = new char[size];
- top = -1;
- }
- void push(char c) {
- stackArray[++top] = c;
- }
- void pop() {
- if (isEmpty()) {
- cout<<"堆栈为空,无法弹出"<
- }
- else{
- top--;
- }
- }
- char topElement() {
- if (isEmpty()) {
- throw "堆栈为空。";
- }
- return stackArray[top];
- }
- bool isEmpty() {
- if(top>-1)
- return false;
- else
- return true;
- }
- void displayFromBottom() {
- if(!isEmpty()){
- for (int i = 0; i <= top; i++) {
- cout << stackArray[i];
- }
- cout << endl;
- }
- else
- cout<<"栈为空"<
- }
-
- void setNull() {
- top=-1;
- }
- };
-
- int main() {
- int stackSize;
- cout << "输入栈的大小:";
- cin >> stackSize;
-
- Stack myStack(stackSize);
- getchar();//清除换行符
- cout << "输入待处理的字符串(输入<代表退一格,输入@代表清除到行首,输入#结束):"<
-
- char ch;
-
- while ((ch = getchar()) != '#') {
- if(ch=='<'||ch=='@'||ch=='\n')
- {
- if (ch == '<') {
- myStack.pop();
- }
- if (ch == '@') {
-
- myStack.setNull();
- }
- if (ch == '\n') {
- myStack.displayFromBottom();
- myStack.setNull();
- }
- }
- else {
- myStack.push(ch);
- }
- }
-
- myStack.displayFromBottom();
-
- return 0;
- }
-
相关阅读:
机器学习笔记之隐马尔可夫模型(二)背景介绍
Love 6 面试准备所看过的面经部分总结(C++后台开发岗位)
OFDM深入学习及MATLAB仿真
微信小程序获取元素的高度
DM(达梦)数据库和其他数据库(mysql,sqlserver...)表互相迁移
批量删除微博教程!
strlen函数使用与模拟实现【进阶版】
LeetCode --- 1961. Check If String Is a Prefix of Array 解题报告
Spring对JUnit的支持
MFC扩展库BCGControlBar Pro v34.1 - 仪表盘、对话框组件升级
-
原文地址:https://blog.csdn.net/2301_79790771/article/details/136296985