Can't Figure this out, Please help

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.