4.6.6 括号匹配问题
2025年09月26日
4.6.6 括号匹配问题
【例4-30】输入一个带有括号的数学表达式,判断左右括号是否匹配。
按“三步法”原则分析如下。
做什么
需要输入任意一个带有括号的数学表达式,所以窗体上需要一个文本框。
怎么做
分析:问题的关键在于逐一提取出这个表达式中的每个字符,然后加以判断。可考虑使用字符串操作函数MID、LEN。假设用户输入的表达式字符串放到了s变量中,然后用MID(s,i,1)函数逐个取出每个字符,该函数是从s字符串中第i个字符开始取,取出1个字符,所以只要让i的取值从1…LEN(s)开始变化,这样就可以逐一取出s中的所有字符。
设置一个标志变量flag,默认值为0,如果出现一个“(”,则flag增1,如果出现一个“)”,则flag减1。当整个表达式判断完毕后,通过判断flag值就可以判定左右括号是否匹配,如果flag=0,则左右括号匹配;如果flag>0,则左括号多,flag值就是左括号多出的个数;如果flag<0,则右括号多,flag的绝对值就是右括号多出的个数。
步骤描述如下:
1)读取表达式字符串保存到s中。
2)初始化i等于1,flag初始化为0。
3)如果i小于或等于LEN(s),则向下执行,否则执行第8)步。
4)利用MID(s,i,1)函数,取出第i个符号保存到变量a中。
5)判断其是否等于“(”,如果相等,则flag增1。
6)判断其是否等于“)”,如果相等,则flag减1。
7)i值增1,返回第3)步。
8)判断flag,如果flag=0,则输出左右括号匹配;否则如果flag>0则输出左括号多flag个;否则输出右括号多-flag个。
实现
●用For语句实现:
●用While语句实现:
读者们可以试着写一下用Do…Loop语句如何实现。