0
你好我正在试图写一个RPN转换器,我是C++的新手。但我遇到了问题。希望我能详细解释这些问题。我使用数组来堆叠我的操作符。现在让我们使用例如“5 + 8”当我坐下来:插入Postfix记法C++
else if(infix[i] == '+' or infix[i] == '-' or infix[i] == '*' or infix[i] == '/' or infix[i] == '^'){
while(isp(stack1.top()) >= icp(infix[i])){
postfix += stack1.pop();
}
if(isp(stack1.top()) < icp(infix[i])){
stack1.push(infix[i]);
}
出于某种原因,将运营商推到堆栈,但随后它不会操作添加到即时通讯加入我的元素后缀串变量太。出来就像“5 8”我看着我的流行功能,这似乎是正确的,但即时通讯难倒。如果你能带领我走向正确的方向,那就太好了。
这是我的全码:
#include <iostream>
#include <string>
#define DEFAULT_SIZE 100
using namespace std;
class Stack{
private:
char *array;
int tos, capacity;
public:
//constructors
Stack();
//Destructor
~Stack();
//Methods
void push(char a);
char pop();
char top();
int get_size();
bool is_empty();
bool is_full();
void display();
};
Stack::Stack(){
array = new char[DEFAULT_SIZE];
tos = 0;
capacity = DEFAULT_SIZE;
}
Stack::~Stack(){
delete[] array;
}
void Stack::push(char a){
if(!is_full())
array[tos++] = a;
}
char Stack::pop(){
return array[--tos];
}
char Stack::top(){
return array[tos];
}
int Stack::get_size(){
return tos;
}
bool Stack::is_empty(){
if(tos == 0)
return true;
else
return false;
}
bool Stack::is_full(){
if(tos == capacity)
return true;
else
return false;
}
void Stack::display(){
if (tos == 0)
cout<<"The stack is empty"<<endl;
else{
for (int i=0; i<tos;i++)
cout<<array[i]<<" ";
cout<<endl;
}
}
int isp(char a){
if(a == '^'){
return 3;
}
else if (a == '*' or a == '/'){
return 2;
}
else if(a == '+' or a == '-'){
return 1;
}
else if(a == '('){
return 0;
}
else
return -1;
}
int icp(char a){
if(a == '^'){
return 4;
}
else if (a == '*' or a == '/'){
return 2;
}
else if(a == '+' or a == '-'){
return 1;
}
else if(a == '('){
return 4;
}
}
int main(){
string infix, postfix;
Stack stack1;
cout << "This is a Infix to Postfix Expression converter." << endl;
cout << "Enter your Infix Expression: ";
cin >> infix;
stack1.push('#');
for(int i=0;i<infix.length();i++){
if(isdigit(infix[i]) or isalpha(infix[i])){
postfix += infix[i];
}
else if(infix[i] == '+' or infix[i] == '-' or infix[i] == '*' or infix[i] == '/' or infix[i] == '^'){
while(isp(stack1.top()) >= icp(infix[i])){
postfix += stack1.pop();
}
if(isp(stack1.top()) < icp(infix[i])){
stack1.push(infix[i]);
}
}
}
cout << postfix;
return 0;
}
另外,如果你知道C++ RPN转换器随时分享,因为这将是一个非常大的帮助anygood资源的网站!我要去随机算法。我在谷歌上找到的。
一开始'cin >> infix'只会读到第一个空格......你可能想用'getline(std :: cin,infix)'。因此,对于你的示例输入'“5 + 8”',只有'5'将被处理.... –