在 C++ 中求解三目表达式的程序

在 C++ 中求解三目表达式的程序

假设我们有一个包含三目表达式的表达式,我们需要求解出它的结果。它支持一些值,例如 T 和 F 表示 True 和 False,以及 ? 和 : 字符。它具有以下属性:

  • 给定字符串的长度必须小于或等于 10000。
  • 条件表达式从右到左分组。
  • 条件始终为 T 或 F。因此,条件永远不会是数字。
  • 表达式的结果将始终计算为 T 或 F。

例如,如果输入为“T?T?F:T:T”,那么输出将为 F。

为了解决这个问题,我们将按照以下步骤进行处理:

  • ret := 一个空字符串, n := s 的大小,
  • 创建一个栈 st,
  • 对于 i 在范围 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

让我们看下面的实现代码以更好地理解:

更多Python相关文章,请阅读:Python 教程

示例

#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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程