二元運算子字尾表示式

2021-10-07 17:05:43 字數 1782 閱讀 3936

中綴表示式轉字尾表示式

中綴表示式就是我們常見的算術表示式,比如:23+4(3+5)+10/2,運算子在運算數之間,而字尾表示式就是比如:59684/-3+#,運算子在運算數的後面,所以要把中綴表示式轉字尾表示式,用棧來實現。

因為*/的優先順序大於±,所以如下所示:

1.如果是運算元,直接輸出,即為字尾表示式的。

2.如果棧為空,就代表沒有運算子,所以遇到運算子就壓入棧中。

3.如果是( ,直接壓入棧中。

4.如果是 ),就開始出棧,直到遇到( ,但( 不輸出,只彈出。

5.如果是+ - ,因為±的優先順序比 乘除 小,所以只有遇到優先順序最小的(,才能入棧,所以就出棧,直到遇到(,再把現在的壓進去棧。

6.如果是乘除,優先順序高,所以只有遇到棧頂同樣是乘除,才可以彈出,然後把現在的壓進去棧。

7.最後把棧中的都彈出來。

總結一下,就是( 壓入棧中優先順序降為最小,直到遇到),才可出棧,其他運算子,如果棧頂的優先順序比自己大或跟自己相同,彈出棧頂,直到棧頂的優先順序小於自己,再把自己壓進去。最後當所有運算元都走完,再把棧中的都彈出來。

#include

using namespace std;

int main(

)else if(s[i]

=='('

)else if(s[i]

==')'

) top--;

}else if(s[i]

=='+'

||s[i]

=='-'

) stack[++top]

=s[i];}

else if(s[i]

=='*'

||s[i]

=='/'

) stack[++top]

=s[i];}

} while(top!=0)

return 0;

}

算術表示式轉字首,中綴,字尾

#include

using namespace std;

int cmp(char x)

void work1(string ch)

stacks1;

stacks2;

for(int i=0;ielse

s2.pop();

} else

} else}}

} while(

!s2.empty(

)) while(

!s1.empty(

)) cout<}void work2 (string ch)

cout<}void work3(string ch)

else if(ch[i]

=='('

)else if(ch[i]

==')'

) top--;

}else if(ch[i]

=='+'

||ch[i]

=='-'

) stack[++top]

=ch[i];}

else if(ch[i]

=='*'

||ch[i]

=='/'

) stack[++top]

=ch[i];}

} while(top!=0)

}int main(

)

二元運算子過載

siwuxie095 二元運算子過載 所謂 二元運算子,即 這個符號與兩個運算元進行運算 1 加號 的過載 加號 的過載方式有兩種 一種是友元函式過載,一種是成員函式過載 1 先來看成員函式過載,如下 定義乙個座標類 coordinate 在類中宣告成員函式 operator 它的引數是 const...

二元加運算子

減法,乘法,除法在運算過程中,都是先將運算元,轉成數值,再進行後續操作,而加法,卻有所不一樣。當兩個數值相加時,加法運算子,跟減法操作符一樣,直接求和。var a 1 var b 2 a b 3當兩個字串相加時,加法運算子,這表現為字串拼接。var a 1 var b 2 a b 12 注意 只有有...

C 二元運算子過載

二元運算子需要兩個引數,下面是二元運算子的例項。我們平常使用的加運算子 減運算子 乘運算子 和除運算子 都屬於二元運算子。就像加 運算子。下面的例項演示了如何過載加運算子 類似地,您也可以嘗試過載減運算子 和除運算子 include using namespace std class box voi...