首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在字符串中找到匹配的大括号对?

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

Stack Overflow用户
提问于 2013-03-01 16:32:22
回答 6查看 19K关注 0票数 5

假设我有一个字符串“(支付)+ (8个工作小时)+(公司规则)”。现在我想检查这个完整的字符串是否用括号括起来。基本上我想检查字符串是不是这样:“((支付)+ (8个工作小时)+(公司规则))”。如果它已经用括号括起来了,那么我会让它保持原样,否则我会对完整的字符串应用括号,这样输出就是:“((支付)+ (8个工作小时)+(公司规则))”。通过计算括号的数量,我不能解决这个问题。

有没有人能提出一个解决方案?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-01 16:37:49

Stack是一个好主意,但是如果您想查看完整的字符串是否用括号括起来,我建议您将遇到的开头paren的索引放在Stack上。这样,每次在堆栈上弹出一个项目时,都会检查它是否为0,这意味着对应于这个结束paren的开始paren位于字符串的开头。最后一个结束语paren的检查结果将告诉您是否需要添加括号。

示例:

代码语言:javascript
复制
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
}
票数 10
EN

Stack Overflow用户

发布于 2013-03-01 16:34:00

使用堆栈..就像当你找到一个(括号,按下它,当你看到它时)弹出堆栈..最后,当字符串完全解析时,堆栈应该是空的……这将确保您的括号不会丢失。

在您的示例中,如果在堆栈之间为空,则整个字符串没有括号

例如:对于输入字符串:

(付费)+ (8个工作小时)+(公司规定)

第一个(将被推送,当它遇到时)将弹出堆栈,现在检查是否有更多的字符串需要解析,并且堆栈不为空。如果stack为空,则表示整个字符串不在括号中。

而对于字符串:

((付费)+ (8个工作小时)+(公司规定))

在最后一个)出现之前,堆栈不会为空。

希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2019-07-10 20:58:29

查找右括号索引

代码语言:javascript
复制
public int FindClosingBracketIndex(string text, char openedBracket = '{', char closedBracket = '}')
{
            int index = text.IndexOf(openedBracket);
            int bracketCount = 1;
            var textArray = text.ToCharArray();

            for (int i = index + 1; i < textArray.Length; i++)
            {
                if (textArray[i] == openedBracket)
                {
                    bracketCount++;
                }
                else if (textArray[i] == closedBracket)
                {
                    bracketCount--;
                }

                if (bracketCount == 0)
                {
                    index = i;
                    break;
                }
            }

            return index;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15153533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档