C# 利用 Stack (栈) 检测括号是否承兑

C# 利用 Stack (栈) 检测括号是否承兑

【案例描述】
本案例介绍具有栈结构的泛型集合类型 Stack<T> 的使用方法。该案例先从控制台输入一个括号表达式,然后检测括号表达式中的括号匹配是否正确。
【实现过程】
(1)创建一个名为 BracketChecked 的控制台应用程序。
(2)从控制台输入括号表达式。在 main 函数中添加代码如下:
Console.WriteLine(「请输入带括号的表达式:」);
string expression = Console.ReadLine();
if (expression == string.Empty) continue;
(3)检测输入的括号表达式中的括号匹配是否正确。在 main 函数中添加代码如下:
Stack<char> brackets = new Stack<char>();
foreach (char bracket in expression)
{
if (bracket == 『(』 || bracket == 『[』 || bracket == 『{』)
{
brackets.Push(bracket);    //括号进入栈
}
else if (bracket == ')『 && brackets.Pop() != 』('
|| bracket == ']' && brackets.Pop() != '['
|| bracket == '}' && brackets.Pop() != '{')
{
Console.WriteLine(「表达式括号格式错误!」);
continue;
}
}
if (brackets.Count == 0) Console.WriteLine(「表达式括号格式正确!」);
else Console.WriteLine(「表达式括号格式错误!」);
【代码解析】
案例代码中创建了一个 Stack<T> 类型的变量 brackets 来存储表达式中的三种括号「(」、「[」和「{」。Stack<T> 类型是一种栈结构。通过 Push 方法将元素添加到栈的顶部,通过 Pop 方法将元素从栈的顶部取出。
注意:栈结构的特点是先进栈的元素后出栈,后进栈的元素先出栈。因此,栈中元素的进出都发生在栈顶。
括号匹配检测的算法思想是遍历括号表达式中的字符,如果遇到正括号,就将正括号添加到栈中,如果遇到反括号,就将栈顶的正括号取出,检测这两个括号是否配对,如果这两个括号是配对的,就继续检测表达式中下一个字符。例如,如下表达式:
{a * [b + (c + d) / e] + f } / g
首先进栈的是左花括号「{」,接着进栈的是左方括号「[」,最后进入栈的是左圆括号「(」。接下来遇到的是右圆括号「)」,此时将栈顶的右圆括号「(」从栈顶取出与右圆括号「)」进行匹配,结果匹配成功。程序继续读取表达式中的字符。同理,当遇到「]」时,从栈顶取出的是「[」;当遇到「}」时,从栈顶取出的是「{」。三个括号都匹配成功后,整个表达式的括号匹配就是正确的。
 

猜你喜欢

转载自blog.csdn.net/zcr_59186/article/details/128531585
今日推荐