根据某些规则检查字符串表达式的有效性
checking the validity of a string expression according to some rules
我有一个无法解决的棘手问题:
我们有一个字符串,其中包含" {}"或" []"序列,我想编写一个函数或方法,该函数或方法检查字符串是否有效:它应该重新返回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();
}
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 如何在C++中使用正则表达式"|"后选择字符串?
- 生成 constexpr 字符串表,不能产生常量表达式
- 如何在 c++11 中使用正则表达式找到确切的子字符串?
- 如何编写将验证以下字符串的正则表达式?
- C++带有捕获组的正则表达式字符串文本
- 如何使用正则表达式从字符串中提取值
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- 使用宏将字符串解析为表达式C++
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 需要忽略日期/序列号,但匹配字符串其余部分的正则表达式
- 如何将正则表达式向量与一个字符串匹配?
- 计算表达式字符串由 std::map 中的键组成
- 正则表达式匹配字符串之间的数字
- 如何根据某个索引将字符串与正则表达式匹配?
- 根据某些规则检查字符串表达式的有效性
- C++字符串表达式求解器遇到访问冲突
- 如何使用RegExp验证字符串表达式
- Boost Spirit Qi解析器不消耗整个字符串表达式