根据某些规则检查字符串表达式的有效性

checking the validity of a string expression according to some rules

本文关键字:字符串 表达式 有效性 检查 规则      更新时间:2023-10-16

我有一个无法解决的棘手问题:

我们有一个字符串,其中包含" {}"或" []"序列,我想编写一个函数或方法,该函数或方法检查字符串是否有效:它应该重新返回true:

  • 如果字符串为空
  • 如果e有效(仅包含上面的序列),则{e}或[e]也有效。
  • 或e和f是有效表达式的串联,结果也有效。

    "[{}]" // valid
    "{[}]" // invalid
    "{{[[]]}}" // valid
    "{{[[]]}}{{[[]]}}" // valid
    

我试图通过通过char扫描字符串char来解决这个问题,我没有找到合适的算法,然后我考虑了regex_match,最后我对自己说,应该用状态机器解决这种问题(像ebnf)。

您该怎么办来解决这个问题?

c

中的简单答案
   static bool check(const string& sequence)
   {
      if (sequence.empty())
         return true;
      std::stack<char> stack;
      for (size_t i = 0; i < sequence.length(); ++i)
      {
         const char current = sequence.at(i);
         if (current == '{' || current == '[')
            stack.push(current);
         if (current == '}' || current == ']')
         {
            if (stack.empty())
               return false;
            char last = stack.top();
            if (current == '}' && last == '{' || current == ']' && last == '[')
               stack.pop();
            else
               return false;
         }
      }
      return stack.empty();
   }