c# - 如何在字符串中找到匹配的一对大括号?

标签 c# string stack

假设我有一个字符串 "(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/

相关文章:

string - 如何使用字符串作为 Golang 中 rand.Seed() 函数的输入?

java - 构造函数调用是否也进入堆栈?

gcc - 如何知道.exe程序的堆栈大小限制?

c# - 从ViewModel(MVVM)添加到XAML WPF

c# - 绑定(bind) ObservableCollection 对象麻烦

c# - select distinct 只选择单列

python - 遍历堆栈(反向列表),是否有 isempty() 方法?

c# - 克隆 Windows 应用商店应用程序 - 应该更改哪些内容?

c++ - 如何遍历字符串中的每个字符?

c - 如何在C中的引号之间找到子字符串