Can't Figure this out, Please help
Nov 8, 2012 at 6:28pm UTC
I've been working on this Infix to Postfix for a couple weeks, and I can't seem to figure out why it keeps crashing when i try and do more complicated conversions.
For example:
Input >> 2+3*5
Output >> 235*+
Now thats perfect, it's supposed to look like that but when i try:
Input >> 2+3*(5-6)-4
Output >> 2356(*+ >> "Debug Assertion Failed"
Expected >> 2356-*+4-
I am supposed to be using Dijkstra's algorithm for converting.
ItoP.h
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
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
using namespace std;
class ItoP
{
public :
string Convert(string);
ItoP();
private :
stack<string> mystack;
string postfix;
string infix;
string operate;
char token;
char compare;
};
ItoP::ItoP()
{
}
string ItoP::Convert(string inData)
{
for (int i=0;i<=inData.length();i++)
{
token = 0;
operate.clear();
token = inData[i];
operate += token;
if (token >= '1' && token <= '9' )
{
cout << token; //if token is a digit then output token
}
else
{
if (token == '(' )
{
mystack.push(operate); //if token is ( then push token to stack
}
else {
if (token == ')' )
{
compare + mystack.top();
while (compare != '(' ) {
mystack.pop();
cout << mystack.top();
compare = 0;
compare + mystack.top();
}
mystack.pop();
}
else
{
if (mystack.empty())
{
mystack.push(operate);
}
else
{
compare + mystack.top();
while (!mystack.empty() && token <= compare)
{
mystack.pop();
cout << mystack.top();
compare = 0;
compare + mystack.top();
}
mystack.push(operate);
}
}
}
}
}
while (!mystack.empty())
{
cout << mystack.top();
mystack.pop();
}
cout << endl;
return postfix;
}
ItoP.cpp
1 2 3 4 5 6 7 8
#include "ItoP.h"
int main() {
string input;
getline(cin,input);
ItoP Conl;
Conl.Convert(input);
return 0;
}
Topic archived. No new replies allowed.