假设我有一个字符串 "(paid for) + (8 working hours) + (company rules)"。现在我想检查这个完整的字符串是否被括号括起来。基本上我想检查字符串是否是这样的:“((付费)+(8 个工作时间)+(公司规则))”。如果它已经被括号括起来,那么我将保持原样,否则我将对完整的字符串应用括号,以便输出为:“((付费)+(8个工作小时)+(公司规则)) “。通过计算括号的数量,我无法解决这个问题。
有人可以提出解决方案吗?
最佳答案
Stack
是个好主意,但是因为你想看看完整的字符串是否被括号包围,我建议你把遇到的左括号的 index在 堆栈
上。这样,每次从堆栈中弹出一个项目时,检查它是否为 0
,这意味着对应于此闭括号的左括号位于字符串的开头。最后一个关闭括号的检查结果将告诉您是否需要添加括号。
示例:
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
}
关于c# - 如何在字符串中找到匹配的一对大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15153533/