程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> codechef Transform the Expression 轉換成逆波蘭式

codechef Transform the Expression 轉換成逆波蘭式

編輯:C++入門知識

把一般式子轉換成逆波蘭式。

這裡的都是加括號的,難度降低點。

Example

Input:
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))

Output:
abc*+
ab+zx+*
at+bac++cd+^*

知道其特點就好辦:

1 遇到字母一定是可以輸出的

2 遇到操作符號就入棧

3 遇到括號')',就出棧一個操作符 - 注意不是所有操作符出棧

不帶括號的操作區別就在於是否需要判斷符號的優先級。

#include 
#include 
#include 
using namespace std;

int TransformTheExpression()
{
	int T = 0, c = 0, id = 0;
	scanf("%d\n", &T);
	char buffer[40200];
	char res[40200];
	stack stk;
	if ((c = fread(buffer, 1, 40200, stdin)) > 0)
	{
		for (int i = 0; i < c; i++)
		{
			if ('(' == buffer[i]) continue;

			if ( buffer[i] == '+' || buffer[i] == '-' ||
				buffer[i] == '*' || buffer[i] == '/' || buffer[i] == '^')
			{
				stk.push(buffer[i]);
			}
			else if (buffer[i] == ')')
			{
				res[id++] = stk.top();
				stk.pop();
			}
			else	res[id++] = buffer[i];
		}
	}
	fwrite(res, sizeof(char), id, stdout);
	return 0;
}



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved