![]() |
#2
alweeq862010-05-09 10:50
|
问题描述:
在对高级语言编写的程序进行编译时会遇到表达式或字符串的括号匹配问题。例如 C++
程序中左、右花括号“{”和“}”的匹配问题。表达式(字符串)的括号匹配问题要求确定
一给定表达式(字符串)中左、右括号的匹配情况。例如,表达式(x*(x+y)-z)在位置 1 和 4
处有左括号,在位置 8 和 11 处有右括号。位置 1 处的左括号与位置 11 处的右括号相匹配;
位置 4 处的左括号与位置 8 处的右括号相匹配。而在表达式(x+y)*z)(中,位置 8 处的右括号
没有可匹配的左括号,位置 9 处的左括号没有可匹配的右括号。
编程任务:
给定一个 C++源程序,编程计算其中括号“<”和“>”;“(”和“)”;“[”和“]”;“{”
和“}”的匹配情况。
数据输入:
C++源程序文件名为 prog.cpp。
结果输出:
将括号“<”和“>”; (”和“)”; [”和“]”; {”和“}”的匹配情况输出到文件 output.txt。
文件的第 1 行是括号“<”和“>”的匹配情况,如果匹配则输出“Yes”,否则输出“No”;
文件的第 2 行是括号“(”和“)”的匹配情况,如果匹配则输出“Yes”,否则输出“No”;
文件的第 3 行是括号“[”和“]”的匹配情况,如果匹配则输出“Yes”,否则输出“No”;
文件的第 4 行是括号“{”和“}”的匹配情况,如果匹配则输出“Yes”,否则输出“No”。
输入文件示例
prog.cpp
#include <iostream.h>
void Output(int NowOut, int Track, int& Last)
{
if (NowOut == Last) Last = 0;
}
bool Hold(int c, int last[], int track[], int k)
{
for (int i = 1; i != k; i++) // find best track
if (last[i]) {
BestLast = last[i];
BestTrack = i;
}
return true;
}
输出文件示例
output.txt
Yes
Yes
Yes
Yes