如何转换基于指针的动态int堆栈,使其以字符串形式输出?

时间:2019-06-26 06:45:27

标签: c++ stack

我正在通过编写基于指针的动态堆栈在c ++中创建反向波兰语表示法整数计算器,但是我在MyStack类中使用toString方法遇到了麻烦。

这是我的代码应该如何工作的背景:

方法说明:

  • constructor:初始化对象,设置必要的内存。
  • destructor:释放对象可能需要释放的所有内存。
  • clear():清空堆栈。
  • pop():如果不为空,则删除并返回栈顶值。如果在尝试弹出时堆栈为空,则引发异常。选择任何例外。
  • push(int):如果有足够的内存,则接受整数作为唯一参数并将其压入堆栈。
  • size():以整数形式返回堆栈的大小。
  • toString():返回堆栈的字符串表示形式。例如,如果堆栈中包含8, 3, 2, 5,其中8在顶部,则将返回[8, 3, 2, 5],其格式完全相同。

计算器将需要支持以下操作:

  • +:添加
  • -:减法
  • *:乘法
  • /:部门
  • %:模量
  • ?:使用toString()方法将堆栈的当前内容打印到屏幕上。
  • ^:弹出堆栈顶部,仅显示弹出的值。
  • !:退出计算器。

计算器将连续读取输入,直到!输入。它可以读取任意数量的令牌作为输入(请参见下文)。如果堆栈中没有足够的整数来执行计算,则应显示#Not enough arguments.。如果输入了除整数以外的任何内容或受支持的操作,则应显示错误消息#Invalid input.,而不会中断特定输入行的其余操作。

我在使用toString方法时遇到麻烦。如何将整数堆栈转换为字符串?

我的代码:

//  main.cpp
//  practice2
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
struct Node
{
    int data;
    Node *next;
};
class MyStack
{
private:
    Node *top;  
public:
    MyStack();
    ~MyStack();
    void clear();
    void push(int);
    int pop();
    int size();
    string toString();
    bool isEmpty();
};
MyStack::MyStack()
{
    top = NULL;
};

MyStack::~MyStack()
{
    while(!isEmpty())
    {
        pop();
    }
};

void MyStack::push(int d)
{
    Node *temp = new Node;
    temp->data = d;
    temp->next = top;
    top = temp;

}
int MyStack::pop()
{
    if(!isEmpty())
    {
        int value = top->data;
        Node *oldtop = top;
        top = oldtop->next;
        delete oldtop;
        return value;
    } else
    {
        cout << "stack is empty"; //throw exception
        exit(1);
    }
}

string MyStack::toString()
 {
    //redo later
 };

bool MyStack::isEmpty()
{
    return (top == NULL);
}
int main()
{
    MyStack *s = new MyStack();

    s->push(8);
    s->push(3);
    s->push(2);
    s->push(5);
    delete s;
    return 0;
}

预期输出:

toString():返回堆栈的字符串表示形式。例如,如果堆栈中包含8, 3, 2, 5,其中8位于顶部,则将返回[8, 3, 2, 5],其格式完全相同。

1 个答案:

答案 0 :(得分:1)

类似

string MyStack::toString()
 {
    string result = "[";
    bool needs_comma = false;
    for (Node* temp = top; temp != nullptr; temp = temp->next) {
        if (needs_comma) result += ", ";
        needs_comma = true;
        result += std::to_string(temp->data);
    }
    result += "]";
    return result;
 };

应该可以解决问题。