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
广告