📄 exam3-2.cpp
字号:
#include <string.h>
#include <iostream.h>
#include <stdlib.h>
const MaxStackSize = 100;
typedef char DataType;
#include "SeqStack.h"
void ExpIsCorrect(char exp[], int n)
//判断有n个字符的字符串exp左右括号是否配对正确
{
SeqStack myStack; //定义链式堆栈
int i;
for(i = 0; i < n; i++)
{
if((exp[i] == '(') || (exp[i] == '[') || (exp[i] == '{'))
myStack.Push(exp[i]); //入栈
else if(exp[i] == ')' && myStack.NotEmpty()
&& myStack.GetTop() == '(')
myStack.Pop(); //出栈
else if(exp[i] == ')' && myStack.NotEmpty()
&& myStack.GetTop() != '(')
{
cout << "左右括号配对次序不正确!" << endl;
return;
}
else if(exp[i] == ']' && myStack.NotEmpty()
&& myStack.GetTop() == '[')
myStack.Pop(); //出栈
else if(exp[i] == ']' && myStack.NotEmpty()
&& myStack.GetTop() != '[')
{
cout << "左右括号配对次序不正确!" << endl;
return;
}
else if(exp[i] == '}' && myStack.NotEmpty()
&& myStack.GetTop() == '{')
myStack.Pop(); //出栈
else if(exp[i] == '}' && myStack.NotEmpty()
&& myStack.GetTop() != '{')
{
cout << "左右括号配对次序不正确!" << endl;
return;
}
else if(((exp[i] == ')') || (exp[i] == ']') || (exp[i] == '}'))
&& !myStack.NotEmpty())
{
cout << "右括号多于左括号!" << endl;
return;
}
}
if(myStack.NotEmpty())
cout << "左括号多于右括号!" << endl;
else
cout << "左右括号匹配正确!" << endl;
}
void main(void)
{
char a[] = "(())abc{[)(]}"; //测试例子1。注意:左右括号配对次序不正确
int n = strlen(a);
ExpIsCorrect(a, n);
char b[] = "(()))abc{[]}"; //测试例子2。注意:右括号多于左括号
n = strlen(b);
ExpIsCorrect(b, n);
char c[] = "(()()abc{[]}"; //测试例子3。注意:左括号多于右括号
n = strlen(c);
ExpIsCorrect(c, n);
char d[] = "(())abc{[]}"; //测试例子4。注意:左右括号匹配正确
n = strlen(d);
ExpIsCorrect(d, n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -