中綴式變字尾式

2021-06-23 03:44:23 字數 1567 閱讀 6217

時間限制:

1000

ms  |  記憶體限制:

65535

kb難度:3描述

輸入第一行輸入乙個整數n,共有n組測試資料(n<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0

輸出每組都輸出該組中綴式相應的字尾式,要求相鄰的運算元操作符用空格隔開。

樣例輸入

21.000+2/4=

((1+2)*5+1)/4=

樣例輸出

1.000 2 4 / + =

1 2 + 5 * 1 + 4 / =

題解:主要完成對陣列postexp

中指定位置新增空格。

程式**:

#include

#include

#define maxsize 1000

#define maxop   7

struct   //設定運算子優先順序

lpri=,,,,,,}, 

rpri=,,,,,,};

int leftpri(char op)    //求左運算子

op的優先順序

int rightpri(char op)  //求右運算子

op的優先順序

int inop(char ch)       //判斷

ch是否為運算子

int precede(char op1,char op2)  //op1和

op2運算子優先順序的比較結果

void trans(char *exp,char postexp)     

//將算術表示式

exp轉換成字尾表示式

postexp

op; //定義運算子棧

int i=0; //i作為

postexp

的下標op.top=-1;

op.top++;                  //將

'='進棧

op.data[op.top]='='; 

while (*exp!='\0') //exp表示式未掃瞄完時迴圈

//   postexp[i++]='#'; //用

#標識乙個數值串結束

postexp[i++]=' '; }

else //為運算子的情況

switch(precede(op.data[op.top],*exp))

} //while (*exp!='\0')

while (op.data[op.top]!='=') 

//此時

exp掃瞄完畢

,退棧到

'='為止

postexp[i++]='='; //給

postexp

表示式新增結束標識

postexp[i++]='\0'; }

int main()

system("pause");

return 0; }

中綴式變字尾式

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 輸入第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證...

中綴式變字尾式

描述 輸入第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。資料保證除數不會為0 輸出每組都輸出該...

中綴式變字尾式

時間限制 難度 3 描述 輸入 第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。資料保證除數不會...