Я делаю стек в C ++ для управления математическими операциями с инфиксами, постфиксами и префиксами. Я использую 2 класса, один называется Node (класс с автоматическими ссылками), а другой - Stack. В Node у меня есть 2 свойства, одно из которых ID (int, только для тестов) и element (это char *). В стеке я управляю всеми узлами в 2 стеках, один стек управляет операндами (stack1), а другой стек управляет операторами (stack2). Если я использую выражение: «53 + 72-30 / 38 * 912», идея состоит в том, что в стеке, например, я должен иметь [*, /, -, +] и идентификаторы для каждого объекта [4, 3 2, 1], но результат для stack2 выглядит следующим образом [*, *, *, *], но идентификаторы для каждого из них хороши [4, 3, 2, 1]
Я думаю, что проблема должна быть с символом *, но я не знаю, как ее решить, не могли бы вы помочь мне, пожалуйста?
Заранее спасибо!
<code>Stack.cpp</p>
<p>//this is inside of a loop that goes trough a char* (named expr)
char tmp[i] = expr[i];
char op[] = {tmp, '\0'}; //I do this because the constructor of Node requieres a char*,
//and it is because I use the class Node to manage the stack of operands, which are char*
//for example, '983' (I do not use int for this case, but I also may create a template...
//but I want to know how to make it with char*)
this->addOperatorToStack2(op);
Stack.cpp
//The method that adds an operator (a new node) to the stack
void Stack::addOperatorToStack2(char *op){
Node *tmpNode = new Node(op);
if(!currentNode){
currentNode = tmpNode;
}
else{
tmpNode->nextNode = currentNode;
currentNode= tmpNode;
}
}
Node.h
#ifndef NODE_H
#define NODE_H
class Node{
friend class Stack;
public:
Node(char *);
char* getElement() const;
private:
char *element;
Node *nextNode;
static int counter;
int id;
};
#endif
Node.cpp
#include "Node.h"
Node::Node(char *element){
this->nextNode = 0;
this->element = element;
counter++;
id = counter;
}
char* Node::getElement()const{
return this->element;
}
int Node::counter= 0;