Loading

代码编译合法性检查

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

    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
posted @ 2022-03-10 16:12  Dwaynerbing  阅读(181)  评论(0编辑  收藏  举报