如何检测}括号错误与堆栈
本文关键字:错误 堆栈 何检测 检测 | 更新日期: 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()为真,那么表达式是有效的