-
Notifications
You must be signed in to change notification settings - Fork 81
Expand file tree
/
Copy pathInfixtoPostfix.cpp
More file actions
113 lines (96 loc) · 1.9 KB
/
InfixtoPostfix.cpp
File metadata and controls
113 lines (96 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Program to convert infix notation to postfix notation in c++ using stacks
#include<iostream>
#include<stack>
#include<string>
using namespace std;
// Function to check operand
bool IsOperand(char C)
{
if(C >= '0' && C <= '9') return true;
if(C >= 'a' && C <= 'z') return true;
if(C >= 'A' && C <= 'Z') return true;
return false;
}
// Function to check operator
bool IsOperator(char C)
{
if(C == '+' || C == '-' || C == '*' || C == '/' || C== '$')
return true;
return false;
}
// Function to get operator precedence
int PrecedenceWeight(char op)
{
int weight = -1;
switch(op)
{
case '+':
case '-':
weight = 1;
case '*':
case '/':
weight = 2;
case '$':
weight = 3;
}
return weight;
}
// Function to perform an operation and return output
int PrecedenceCheck(char op1, char op2)
{
int op1Weight = PrecedenceWeight(op1);
int op2Weight = PrecedenceWeight(op2);
if(op1Weight == op2Weight)
{
if(op1 != '$') return false;
else return true;
}
return op1Weight > op2Weight ? true: false;
}
string InfixToPostfix(string input);
int main()
{
string input;
cout<<"Enter Infix Expression: ";
getline(cin,input);
string postfix = InfixToPostfix(input);
cout<<"The postfix expression is: "<<postfix<<"\n";
}
string InfixToPostfix(string input)
{
stack<char> S;
string postfix = "";
for(int i = 0; i< input.length(); i++) {
if(input[i] == ' ' || input[i] == ',') continue;
else if(IsOperator(input[i]))
{
while(!S.empty() && S.top() != '(' && PrecedenceCheck(S.top(),input[i]))
{
postfix+= S.top();
S.pop();
}
S.push(input[i]);
}
else if(IsOperand(input[i]))
{
postfix +=input[i];
}
else if (input[i] == '(')
{
S.push(input[i]);
}
else if(input[i] == ')')
{
while(!S.empty() && S.top() != '(') {
postfix += S.top();
S.pop();
}
S.pop();
}
}
while(!S.empty()) {
postfix += S.top();
S.pop();
}
return postfix;
}