I want to receive input.

I want to input the value of p2 through the screen.

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
  #include "Postfix.h"

class Postfix {
private:
	char * expression;
	int index = 0;
public:
	Postfix(char * expression) : expression(expression) {}

	void getPostfix()
	{
		Stack<char> stack;
		stack.Push('#');
		for (char x = NextToken(expression); x != NULL; x = NextToken(expression))
		{
			if (isOperand(x))
				cout << x;
			else if (x == ')')//(3*4)+9#
			{
				while (stack.Top() != '(')
				{
					cout << stack.Top();
					stack.Pop();
				}
				if (!stack.IsEmpty()) stack.Pop();
			}
			else
			{
				for (; !stack.IsEmpty() && isp(stack.Top()) >= icp(x); stack.Pop())
					cout << stack.Top();
				stack.Push(x);
			}
		}

		char x;
		while ((x = stack.Top()) != '#')
		{
			cout << x;
			stack.Pop();
		}
		cout << endl;
	}

	char NextToken(char* e)
	{
		char token = e[index];
		index++;
		return token;
	}

	bool isOperand(char x)
	{
		if (x == '+' || x == '-' || x == '*' || x == '/' ||
			x == '(' || x == ')' || x == '%' || x == '#')
			return false;
		else
			return true;
	}

	int isp(char a)
	{
		if (a == '(')
			return 0;
		else if (a == ')')
			return 19;
		else if (a == '+' || a == '-')
			return 12;
		else if (a == '*' || a == '%' || a == '/')
			return 13;
		else
			return 0;
	}

	int icp(char a)
	{
		if (a == '(')
			return 20;
		else if (a == ')')
			return 19;
		else if (a == '+' || a == '-')
			return 12;
		else if (a == '*' || a == '%' || a == '/')
			return 13;
		else
			return 0;
	}

	double Eval() {

	}
};







void Eval(Expression e)
{
	Stack<char> stack;
	int i = 0;
	for (char x = e[i]; x != NULL; x = e[++i]) {
		if (!(x == '+' || x == '-' || x == '*' || x == '/' ||
			x == '(' || x == ')' || x == '%' || x == '#'))
			stack.Push(x);
		// 숫자가 들어올시 스택에 저장

		else {
			cout << stack.Top();
			stack.Pop(); // 연산자가 들어올 시 숫자를 출력, 스택에서 지움

			if (!stack.IsEmpty()) { // 스택이 비어있지 않을 때
				if (x == '#' || x == '+' || x == '-') { // 연산자가 +,-,#일 경우 스택에 저장되어있는 연산자를 모조리 출력하고 지움 (+,-의 기준으로 앞의 연산자을 모조리 출력한다고 생각)
					while (!stack.IsEmpty()) {
						cout << stack.Top();
						stack.Pop();
					}
				}

				else if ((stack.Top() == '*' || stack.Top() == '/')) { // 연산자가 *,/인데 스택의 top이 *,/이면 스택의 탑 출력 (우선순위가 같으므로 스택의 저장값을 먼저 출력)
					cout << stack.Top();
					stack.Pop();
				}
			}

			if (x != '#') stack.Push(x); // 연산자 스택에 저장

			//remove the correct number of operands for operator x from stack;
			//perform the operation x and store the result onto the stack;
		}
	}
}


void stackTest1() {
	Stack<int> s(2);
	s.Push(3);
	s.Push(2);
	s.Push(1);
	assert(s.Top() == 1);//3 2 1
	s.Pop();//3 2
	assert(s.Top() == 2);
	assert(s.IsEmpty() != true);
	s.Pop();
	s.Pop();
	assert(s.IsEmpty() == true);
	s.Push(4);
	s.Push(6);
	assert(s.Top() == 6);
	s.Pop();
	assert(s.Top() == 4);
}



/*
//165페이지, Exercises 1의 (a) ~ (f)에 대하여 동작하게 debugging
index = 0;
Postfix("A/B-C+D*E-A*C");//화면에서 입력받는 것으로 수정
//Eval("2*4 + 5*7"); 구현
int end;
cin >> end;
}
//코딩 과제:
//페이지 166, 문제 3번과 4번: prefix and postfix을 만드는 문제
// 괄호() 사용시에도 처리하는 코딩으로 수정하는 것
*/
void main()
{
	//stackTest1();

	//Postfix p1("2+(3*4)+9#");//2
	Postfix p1("(3*4)+9#");
	p1.getPostfix();         //+

							 //165페이지, Exercises 1의 (a) ~ (f)에 대하여 동작하게 debugging
	Postfix p2("A/B-C+D*E-A*C#"); //i want input!
	p2.getPostfix();

	Postfix p3("4*7+3-1#");
	p3.getPostfix();

	Eval("2*4 + 5*7#"); //끝을 나타내는 #입력 
	system("pause");
}
Last edited on
Last edited on
You might find this tutorial helpful:

http://www.cplusplus.com/doc/tutorial/basic_io/
Topic archived. No new replies allowed.