如何检测}括号错误与堆栈

本文关键字:错误 堆栈 何检测 检测 | 更新日期: 2023-09-27 18:10:50

我的代码可以检测{括号错误,如果在文件中只有}括号,那么它将抛出空堆栈异常。我想知道如何检测括号错误,如果{this或}this括号缺失,那么它将显示错误。类StackCS{

    #region Vaiables
    Stack stack;
    char[] charArray;
    string[] stringArray;
    int linenumber;
    string chError = string.Empty;
    public string ChError { get { return chError +" "+ linenumber; } set { chError = value; } }
    public StackCS()
    {
        charArray = new char[1000];
        stack = new Stack();
    }
    #endregion 
    #region File
    private void ReadCharFromFile(string add)
    {
        using (StreamReader rdr = new StreamReader(add))
        {
            for (int i = 0; i < charArray.Length; i++)
            {
                charArray[i] = (char)rdr.Read();
            }
        }
    }
    public void ReadFile(string add)
    {
        ReadCharFromFile(add);
        stringArray = File.ReadAllLines(add);
    }
    #endregion
    #region Stack
    public void FillingStack()
    {
        for (int i = 0; i < charArray.Length; i++)
        {
            if (charArray[i] == '{')
            {
                stack.Push('{');
            }
            else if (charArray[i] == '}')
                stack.Pop();
        }
    }
    public void CheckingStack()
    {
        for (int i = 0; i < stringArray.Length; i++)
        {
            if (stack.Count != 0)
            {
                chError = "Error At:";
                linenumber = i;
            }
            else
            {
                chError = "No Error";
            }
        }
    }
    public override string ToString()
    {
        string temp = string.Empty;
        for (int i = 0; i < stringArray.Length; i++)
        {
            temp +=i+"'t't"+stringArray[i] + "'n";
        }
        return temp;
    }
    #endregion
}
        static void Main(string[] args)
    {
        StackCS obj = new StackCS();
        try
        {
            // set the file location, according to ur PC setting
            obj.ReadFile(@"C:'Users'5609'Desktop'Class1.cs");
            obj.FillingStack();
            obj.CheckingStack();
            Console.WriteLine("Line Number" + "     " + "File Content"+"'n");
            Console.WriteLine(obj);
            Console.WriteLine(obj.ChError);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            obj.CheckingStack();
            Console.WriteLine("Line Number" + "     " + "File Content" + "'n");
            Console.WriteLine(obj);
            Console.WriteLine(obj.ChError);
        }
    }

如何检测}括号错误与堆栈

如果没有最后的右括号,那么堆栈中会留下一些东西,如果堆栈中有元素,则在最后返回。如果没有,则表达式无效。

另一种情况是你有一个没有正式表达式的右括号,在这种情况下你会遇到},但是堆栈是空的(错误)。

所以一旦你检查了堆栈,你就确保了{}中包含的所有表达式都是正确的,而不是堆栈上没有未检查的元素,所以stack. empty()为真,那么表达式是有效的