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'將被處理.... –