通过栈判断式子的括号是否使用正确,若正确返回1,否则返回0。
代码如下
bool bracketMatching(char* parastring, int Length)
{
StackPtr tempStack = initStack();
push(tempStack, '#');
char ch, popch;
int i;
for (i = 0; i < Length; i++)
{
ch = parastring[i];
switch (ch)
{
case '(':
case '[':
case '{':
push(tempStack, ch); break;
case ')':popch = pop(tempStack);
if (popch != '(')
{
return false;
}
break;
case ']':
popch = pop(tempStack);
if (popch != '[') {
return false;
}
break;
case '}':
popch = pop(tempStack);
if (popch != '{') {
return false;
}
break;
default:
// Do nothing.
break;
}
}
popch = pop(tempStack);
if (popch != '#')
{
return false;
}
return true;
}
测试如下
void bracketMatchingTest() {
char* s = "[2 + (1 - 3)] * 4";
bool tempMatch = bracketMatching(s, 17);
printf("表达式 '%s'括号是否正确匹配? %d \r\n", s, tempMatch);
s = "( ) )";
tempMatch = bracketMatching(s, 6);
printf("表达式 '%s'括号是否正确匹配? %d \r\n", s, tempMatch);
s = "()()(())";
tempMatch = bracketMatching(s, 8);
printf("表达式 '%s'括号是否正确匹配? %d \r\n", s, tempMatch);
s = "({}[])";
tempMatch = bracketMatching(s, 6);
printf("表达式 '%s'括号是否正确匹配? %d \r\n", s, tempMatch);
s = ")(";
tempMatch = bracketMatching(s, 2);
printf("表达式 '%s'括号是否正确匹配? %d \r\n", s, tempMatch);
}
运行结果如下