我如何转换一个基于动态的,基于指针的int堆栈,以便将其打印成字符串

How do I convert a dynamic, pointer-based int stack so it prints out as a string?

本文关键字:堆栈 int 字符串 打印 指针 动态 转换 何转换 于动态 一个 于指针      更新时间:2023-10-16

我通过编写一个动态的,基于指针的堆栈来创建C 中的反向抛光图数计算器,但是我在Mystack类中使用ToString方法遇到麻烦。

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

方法描述:

  • constructor:初始化对象,设置必要的内存。
  • destructor:释放可能需要通过对象释放的任何内存。
  • clear():清空堆栈。
  • pop():如果不是空的,则删除并返回堆栈上的最高值。如果堆栈试图弹出时堆栈为空,则会引发异常。选择任何例外。
  • push(int):接受整数是唯一的参数,如果有足够的内存,将其推到堆栈上。
  • size():返回堆栈的大小作为整数。
  • toString():返回堆栈的字符串表示。例如,如果堆栈包含8, 3, 2, 5,顶部的8,则将返回[8, 3, 2, 5]的格式,就像这样。

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

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

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

我在ToString方法上遇到了麻烦。如何将INT堆栈转换为字符串?

我的代码:

//  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():返回堆栈的字符串表示形式。例如,如果堆栈包含顶部的88, 3, 2, 5,则将返回[8, 3, 2, 5],格式如下。

之类的东西
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;
 };

应该做技巧。