Untitled
unknown
c_cpp
3 years ago
2.1 kB
15
Indexable
#include <iostream>
#include <stack>
#include <string>
#include <queue>
#include <iomanip>
using namespace std;
string topostfix(string myString);
void steps_postfix(string myString);
int precedence(char op);
int main(){
cout << "Postfix" << endl;
cout << "Expression \t\t Operator \t\t Operand" << endl;
//cout << topostfix("x((a+b)*(c+d))");
cout << topostfix("a+b*c+d");
//cout << topostfix("a*b*c+d*e*f+g");
return 0;
}
string topostfix(string myString){
char myChar[myString.length()];
strcpy(myChar, myString.c_str());
stack<char> s_op;
stack<char> temp;
string result = "";
for(int i = 0; i < myString.length(); i++){
if(myChar[i] != '*' && myChar[i] != '+' && myChar[i] != '-' && myChar[i] != '/' && myChar[i] != '(' && myChar[i] != ')'){ // if operand
result += myChar[i];
cout << myChar[i]; // for step-by-step output
// // output!!!!
// if(s_op.empty()){
// cout << setw(21) << " " << setw(18) << result << endl;
// }
// else{
// while(!s_op.empty()){
// cout << setw(21) << s_op.top() << setw(18) << result << endl;
// temp.push(s_op.top());
// s_op.pop();
// }
// while(!temp.empty()){
// s_op.push(temp.top());
// temp.pop();
// }
// }
//
}
else if (myChar[i] == '(') {
s_op.push(myChar[i]);
}
else if(myChar[i] == ')'){
while(s_op.top() != '('){
result += s_op.top();
s_op.pop();
}
s_op.pop(); // pop the opening parenthesis
}
else{ // if char is an operator
while(!s_op.empty() && precedence(s_op.top()) >= precedence(myChar[i])){
result += s_op.top();
s_op.pop();
}
cout << myChar[i]; // step-by-step output
s_op.push(myChar[i]);
//temp.push((s_op.top()));
}
// print on all lines area
//cout << setw(18) << "hi" << endl;
cout << setw(39) << result << endl;
}
while(!s_op.empty()){
result += s_op.top();
s_op.pop();
}
cout << setw(33) << "Output: " ;
return result;
}
int precedence (char op){
if(op == '*') return 4;
else if (op == '/') return 3;
else if(op == '+') return 2;
else if(op == '-') return 1;
return 0;
}
Editor is loading...