代码编译合法性检查

检查一段代码的合法性的时候,其中一项就是括号配对检查。例如{{[()]}}[]{()}是合法的,而{[()}{[(])}是不合法的。具体代码如下所示:

    class Program
    {
        static bool IsValid(string testString)
        {
            ConcurrentBag<char> itemQueue = new ConcurrentBag<char>();
            foreach (var item in testString)
            {
                switch (item)
                {
                    case '(':
                        itemQueue.Add(')');
                        continue;
                    case '[':
                        itemQueue.Add(']');
                        continue;
                    case '{':
                        itemQueue.Add('}');
                        continue;
                    default:
                        if ((item == ')' || item == ']' || item == '}'))
                        {
                            if (itemQueue.Count > 0)
                            {
                                if (itemQueue.TryTake(out var oldItem))
                                {
                                    if (oldItem != item)
                                    {
                                        return false;
                                    }
                                }
                            }
                        }
                        continue;
                }
            }
            return itemQueue.Count == 0;
        }
        static void Main(string[] args)
        {
            Console.WriteLine(IsValid("{{[()]}}"));
            Console.WriteLine(IsValid("[]{()}"));
            Console.WriteLine(IsValid("{[(])}"));
            Console.WriteLine(IsValid("{[()}"));
            System.Console.ReadKey();
        }
    }

其中ConcurrentBag是线程安全List,但它对加入的数据的处理方式是后进先出。当然,例如代码中的字符串本身包含各种括号时,此种情况暂时没有考虑。以上代码的输出结果如下所示:

True
True
False
False

作者:dongweian

出处:https://www.cnblogs.com/dongweian/p/15990007.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Dwaynerbing  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题