【发布时间】:2011-12-05 00:14:23
【问题描述】:
我的代码可以检测到 { 括号错误,如果文件中只有 } 括号,那么它将抛出空堆栈异常。我想知道如何检测两个括号错误,如果 { 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);
}
}
【问题讨论】:
-
如果您的测试文件包含
Console.WriteLine("{")或Console.WriteLine("}")之类的内容怎么办?你需要忽略字符和字符串中的大括号吗? -
我只需要检查 CS 文件的 {} 括号,就像 Visual Studio IDE 一样。
-
那么你还需要考虑这些字符和字符串。
标签: c# visual-studio-2010 data-structures stack