C++ 三元表示式求值程式
假設我們有一個包含三元表示式的表示式,我們需要計算表示式的結果。它支援一些值,例如 T 和 F 代表 True 和 False,以及“?”和“:”字元。有一些屬性:
- 給定字串的長度必須小於或等於 10000。
- 條件表示式從右到左分組。
- 條件始終為 T 或 F。因此,條件永遠不會是數字。
- 表示式的結果將始終計算為 T 或 F。
例如,如果輸入類似於“T ? T ? F : T : T”,則輸出將為 F。
為了解決這個問題,我們將遵循以下步驟:
- ret := 一個空字串,n := s 的大小,
- 建立一個棧 st
- 對於 i in range n – 1 到 0
- x := s[i]
- 如果 st 不為空且棧頂為“?”,則
- 從 st 中刪除
- first := st 的棧頂,然後從棧中刪除兩個元素
- second := 棧頂,並從 st 中刪除
- 如果 x 為 T,則將 first 插入 st,否則將 second 插入 st
- 否則將 x 插入 st
- 當 st 不為空時,則
- ret := ret + st 的棧頂,並從 st 中刪除
- 反轉 ret 並返回 ret
讓我們看下面的實現來更好地理解
示例
#include
using namespace std;
class Solution {
public:
string parseTernary(string s) {
string ret = "";
int n = s.size();
stack st;
for(int i = n - 1; i >= 0; i--){
char x = s[i];
if(!st.empty() && st.top() == '?'){
st.pop();
char first = st.top();
st.pop();
st.pop();
char second = st.top();
st.pop();
if(x == 'T'){
st.push(first);
}
else st.push(second);
}
else{
st.push(x);
}
}
while(!st.empty()){
ret += st.top();
st.pop();
}
reverse(ret.begin(), ret.end());
return ret;
}
};
main(){
Solution ob;
cout << (ob.parseTernary("T?T?F:T:T"));
}輸入
" T?T?F:T:T"
輸出
F
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP