C# 检查表达式括号是否有效[关闭]

2024-02-01

表达方式:

“(a[i]+{-1}*(8-9))”

应该返回 true,因为这样编写语法是有效的。每个左括号在正确的位置都有一个右闭合器,并且所有括号都处于合法位置。
我尝试通过一个堆栈来做到这一点,我知道我错在哪里,但我想知道解决这个问题的相关方法。 谢谢!
我可怜可怜的错误代码:

            string expression = "( a[i]+{-1}*(8-9) ) ";
        Stack<char> expStack = new Stack<char>();
        List<char> rightBracketsHolder = new List<char>();
        for (int i = 0; i < expression.Length; i++)
        {
            if (expression[i] == '{')
            {
                expStack.Push('}');
                Console.Write("}" + " ");
            }
            else if (expression[i] == '(')
            {
                expStack.Push(')');
                Console.Write(")" + " ");
            }
            else if (expression[i] == '[')
            {
                expStack.Push(']');
                Console.Write("]" + " ");
            }
        }
        Console.WriteLine();
        for (int i = 0; i < expression.Length; i++)
        {
            if (expression[i] == '}')
            {
                rightBracketsHolder.Add('}');
                Console.Write(expression[i] + " ");
            }
            else if (expression[i] == ')')
            {
                rightBracketsHolder.Add(')');
                Console.Write(expression[i] + " ");
            }
            else if (expression[i] == ']')
            {
                rightBracketsHolder.Add(']');
                Console.Write(expression[i] + " ");
            }
        }
        Console.WriteLine();
        bool stackResult = checkValidity(expStack, rightBracketsHolder);
        if (stackResult)
            Console.WriteLine("Expression is Valid.");
        else
            Console.WriteLine("\nExpression is not valid.");
        Console.ReadKey();
    }

    private static bool checkValidity(Stack<char> expStack, List<char> leftBracketsHolder)
    {
        Console.WriteLine();
        int length = leftBracketsHolder.Count;
        for (int i = 0; i < length; i++)
        {
            if (expStack.Peek().ToString().Contains(leftBracketsHolder.ToString()))
            {
                leftBracketsHolder.Remove(expStack.Peek());
                expStack.Pop();

            }
        }
        if (expStack.Count == 0 && leftBracketsHolder.Count ==0)
        {
            return true;
        }
        return false;
    }
}

这段代码将解决你的目的 -

static void Main(string[] args)
    {
        bool error = false;
        var str = "( a[i]+{-1}*(8-9) )";
        Stack<char> stack = new Stack<char>();
        foreach (var item in str.ToCharArray())
        {
            if (item == '(' || item == '{' || item == '[')
            {
                stack.Push(item);
            }
            else if(item == ')' || item == '}' || item == ']')
            {
                if (stack.Peek() != GetComplementBracket(item))
                {
                    error = true;
                    break;
                }
            }
        }

        if (error)
            Console.WriteLine("Incorrect brackets");
        else
            Console.WriteLine("Brackets are fine");
        Console.ReadLine();
    }

    private static char GetComplementBracket(char item)
    {
        switch (item)
        {
            case ')':
                return '(';
            case '}':
                return '{';
            case ']':
                return '[';
            default:
                return ' ';
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 检查表达式括号是否有效[关闭] 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐

  • PHP oci_connect() TNS: 无法解析连接标识符 (ORA-12154)

    我正在 Ubuntu 服务器上测试一些 PHP 代码 并通过 tnsping 命令检查 Oracle 数据库连接 Used TNSNAMES adapter to resolve the alias Attempting to contac
  • 使用登录调用未定义的函数 mysql_query() [重复]

    这个问题在这里已经有答案了 当我执行我的PHP下面的代码我得到一个致命错误我不知道如何解决它 感谢您的帮助 错误 PHP 致命错误 未捕获错误 调用 Applications MAMP htdocs lprapp config php 23
  • 改造 2 - 当响应状态为 422(不可处理的实体)时,响应正文为空

    我正在使用 Retrofit 在我的网络服务器中发出 POST 请求 但是 当响应状态为时 我似乎无法获取响应正文422 unprocessable entity 响应主体始终是null 我想知道我是否做错了什么或者是否有解决方法 因为我在
  • 命名空间内的未命名命名空间

    我被要求修改的一些代码看起来很像这样 namespace XXX namespace some stuff end of unnamed Some stuff within the scope of XXX end of XXX 我正在努力
  • 我如何使用课程?

    我对编程相当陌生 有一件事让我感到困惑 什么是类 如何使用类 我明白了一点 但我似乎找不到完整的答案 顺便说一句 如果这是特定于语言的 那么我正在使用 PHP 进行编程 编辑 还有一件事我忘了说 具体来说 我的意思是问如何在类中使用定义函数
  • 在 Visual Studio 2015 中创建空 MVC 项目

    我正在使用 VS 2015 Enterprise 并且正在尝试创建一个空的 MVC 项目 我通过右键单击解决方案进入 添加 新项目 对话框 然后 我从左侧列表中选择 Web 然后选择 ASP NET Web 应用程序 如下所示 接下来 将打
  • ES6 代理解决“TypeError: Cannot create proxy with a non-object as target”?

    我的最后一个问题是 如何存储Monoidal List函数链的数据 https stackoverflow com questions 51297054 how to store data of a functional chain of
  • 当 DownValues 已经存在时可以阻止 OwnValues 吗?

    对于已经分配了与名称 a 关联的 DownValues 的情况 是否有一种可接受的方法来阻止将 OwnValues 分配给相同的名称 我最初是在尝试某人实现数据字典时遇到这个问题的 这就是我要避免的 Remove a a 1 somethi
  • [] 类型的特殊运行时表示?

    考虑长度索引向量的简单定义 data Nat Z S Nat infixr 5 gt data Vec n Nat a where V0 Vec Z a gt a gt Vec n a gt Vec S n a 当然 我有时会需要以下功能
  • “registration_ids”字段不是 JSON 数组 (Firebase)

    我遇到了 Firebase registration ids 的问题 当我从 Rest Client 发送请求时 我得到了成功的响应 multicast id 4650719213012935695 success 2 failure 0
  • CSS - 水平导航列表项填充所有可用空间

    使用 CSS 如何才能拥有一个水平列表并让所有列表项填充父空间的可用宽度 我将 li 的左侧浮动 然后对每个应用一些填充 但我似乎无法填充整个宽度 这样就在右侧留下了一个间隙 我可能会将最后一个项目浮动到右侧 但会发生的情况是 导航项目的活
  • 我应该使用哪些字符串操作函数?

    在我的 Windows Visual C 环境中 有很多替代方法可以完成相同的基本字符串操作任务 例如 为了进行字符串复制 我可以使用 strcpy ANSI C 标准库函数 CRT lstrcpy kernel32 dll中包含的版本 S
  • 如何以不同的百分比混合两种颜色

    我有两种颜色和一个视图组件 颜色一是我的组件的背景 我将把背景颜色更改为颜色二 但不是突然的 改变类似动画 例如 第二个 1 90 颜色 1 10 颜色 2 第二个 1 80 颜色 1 20 颜色 2 第二个 1 10 颜色 1 90 颜色
  • 如何迭代数组的数组

    迭代数组的最佳方法是什么 sounds Name 1 link 1 Name 2 link 2 Name 3 link 3 Name 4 link 4 我想要 HTML 格式的输出ul li结构 ul li Name 1 link 1 li
  • java/IBSQL 中的 SQL Firebird 实现

    所以尝试将该 SQL 代码放入我的 java 应用程序中 SELECT DISTINCT StRzImRo Rohstoff StRo Bezeichnung CAST SUM BwLsImAt Lieferungen StRzImRo M
  • 在 Windows 上用 C++ 计算 CPU 时间

    C 有没有办法计算运行给定程序或例程需要多长时间在CPU时间里 我使用在 Windows 7 上运行的 Visual Studio 2008 如果你想知道一个进程使用的CPU时间总量 clock nor rdtsc 直接或通过编译器内在函数
  • EventMachine 和 Ruby Threads - 这里到底发生了什么?

    我们一起使用 Rails 和 EventMachine 当将该组合与 Passenger 一起使用时 需要完成一些非常具体的设置 经过大量的试验和错误 我的 EventMachine 初始化运行良好 但我想更好地理解代码 正如您在下面的代码
  • Android 中的电源键事件?

    我想听电源键事件 我怎样才能做到这一点 目前我使用的代码是这样的 Override public boolean onKeyDown int keyCode KeyEvent event if KeyEvent KEYCODE POWER
  • 如何在 Subversion 中设置共享工作副本

    我对 Subversion 还很陌生 是否可以在网络可用共享 c svn projects website 上拥有每个人 在本例中为 3 个使用者 都可以检出和提交文件的工作副本 我们不需要构建服务器 因为它是一个 asp 站点 并且设计人
  • C# 检查表达式括号是否有效[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 表达方式 a i 1 8 9 应该返回 true 因为这样编写语法是有效的 每个左括号在正确的位置都有一个右闭合器 并且所有括号都处于