如何在字符串中找到匹配的大括号?

use*_*061 5 c# string stack

假设我有一个字符串"(付费)+(8个工作小时)+(公司规则)".现在我想检查这个完整的字符串是否用括号括起来.基本上我想检查字符串是否是这样:"((付费)+(8个工作小时)+(公司规则))".如果它已被括号括起来,那么我将原样保留,否则我将括号应用于整个字符串,以便输出为:"((付费)+(8个工作小时)+(公司规则)) ".通过计算括号的数量,我无法解决这个问题.

有人可以建议一个解决方案?

Bot*_*000 10

Stack是个好主意,但你想看看完整的串用括号包围,我建议你把指数上遇到的开括号中Stack.这样,每当你在堆栈上弹出一个项目时,检查它是否是0,这意味着对应于这个结束paren的开始paren是在字符串的开头.对最后一次关闭paren的检查结果将告诉您是否需要添加parens.

例:

String s = "((paid for) + (8 working hours) + (company rules))";
var stack = new Stack<int>();
bool isSurroundedByParens = false;
for (int i = 0; i < s.Length; i++) {
    switch (s[i]) {
    case '(':
        stack.Push(i);
        isSurroundedByParens = false;
        break;
    case ')':
        int index = stack.Any() ? stack.Pop() : -1;
        isSurroundedByParens = (index == 0);
        break;
    default:
        isSurroundedByParens = false;
        break;
    }
}
if (!isSurroundedByParens) {
    // surround with parens
}
Run Code Online (Sandbox Code Playgroud)