c++ Dijkstra's algorithm

I can't seem to get the order correct on this program, it uses an algorithm to convert infix to 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;
}


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
#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; 
};
ItoP::ItoP() {
}
string ItoP::Convert(string inData) {
	for(int i=0;i<=inData.length();i++) {
		operate.clear();
		token = inData[i];
		operate += token;
		switch(inData[i]) {
		case'0': case'1': case'2': case'3': case'4':
		case'5': case'6': case'7': case'8': case'9':
			cout << inData[i]; //If current char is integer then output
			break;
		default:
		if(token == '(') {
			mystack.push(operate); 
			break;
		}
		else
			if(token == ')') {
				while(mystack.top() != "(") {
					cout << mystack.top();
					mystack.pop();
				}
				mystack.pop();
				break;
			}
			else
				if(mystack.empty()) {
					mystack.push(operate); 
					break;
				}
				else
					while(!mystack.empty() && operate <= mystack.top()) {
						cout << mystack.top();
						mystack.pop();
					}
					mystack.push(operate);
					break;
		} //End switch
		 
	}
		
	while(!mystack.empty()) {
		cout  << mystack.top();
		mystack.pop();
	}
	cout << endl;
	return postfix; 
}


Input:

2+3*5

Output:

23*5+

Expected output:

235*+
Last edited on
Topic archived. No new replies allowed.