4.6.6  括号匹配问题

4.6.6 括号匹配问题

【例4-30】输入一个带有括号的数学表达式,判断左右括号是否匹配。

按“三步法”原则分析如下。

978-7-111-49659-5-Chapter04-268.jpg做什么

需要输入任意一个带有括号的数学表达式,所以窗体上需要一个文本框。

978-7-111-49659-5-Chapter04-269.jpg怎么做

分析:问题的关键在于逐一提取出这个表达式中的每个字符,然后加以判断。可考虑使用字符串操作函数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个。

978-7-111-49659-5-Chapter04-270.jpg实现

●用For语句实现:

978-7-111-49659-5-Chapter04-271.jpg

●用While语句实现:

978-7-111-49659-5-Chapter04-272.jpg

978-7-111-49659-5-Chapter04-273.jpg

读者们可以试着写一下用Do…Loop语句如何实现。