用C ++评估三元表达式的程序

假设我们有一个保存三元表达式的表达式,我们必须评估该表达式的结果。它支持T和F等True和False以及“?”值 和“:”字符。有一些属性:

  • 给定字符串的长度必须小于或等于10000。

  • 条件表达式从右到左分组。

  • 条件将始终为T或F。因此,条件将永远不是数字。

  • 表达式的结果将始终为T或F。

因此,例如,如果输入像“ T??F:T:T”,因此输出将为F。

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

示例

#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
猜你喜欢