某司面试题 关于括号匹配问题,求指导
[解决办法]
的确是考察栈的使用,遇到左括号就压栈,遇到匹配的右括号就出栈,当遇到不匹配的括号或者最后栈内还有没有弹出的左括号那就是返回1吧
[解决办法]
我用的是STL的栈
int CheakMatch(char *str)
{
stack<char> staCheak;
while(*str != '\0')
{
switch(*str)
{
case '(':
case '[':
{
staCheak.push(*str++);
break;
}
case ')':
case ']':
{
if(!staCheak.empty())
{
char top;
top = staCheak.top();
staCheak.pop();
if((*str == ')' && top != '(')
[解决办法]
(*str == ']' && top != '['))
return 1;//不匹配,返回1
else
{
str++;
break;
}
}
else//没有左括号,不匹配
return 1;
}
default:
{
str++;
break;
}
}
}
if(staCheak.empty())//栈空,匹配
return 0;
else
return 1;
}
#include <stdio.h>我写的一个简单的程序
#include <stdlib.h>
#define MAX_LEN 256
int main(void)
{
char* str = (char*)malloc(MAX_LEN);
char* brackets = (char*)malloc(MAX_LEN);
printf("input a string: ");
fgets(str, MAX_LEN, stdin);
str[strlen(str) - 1] = '\0';
int i;
int numbers = 0;
char now;
for (i = 0; i < MAX_LEN; ++i)
{
if (str[i] == '(')
{
brackets[numbers++] = '(';
}
else if (str[i] == '[')
{
brackets[numbers++] = '[';
}
else if (str[i] == ')')
{
if (numbers >= 1 && brackets[numbers - 1] == '(') /*之所以测试numbers>=1 是防止因为右括号多余左括号而引起越界*/
{
--numbers;
}
else
{
break;
}
}
else if (str[i] == ']')
{
if (numbers >= 1 && brackets[numbers - 1] == '[')
{
--numbers;
}
else
{
break;
}
}
}
brackets[numbers] = '\0';
if (i < strlen(str)
[解决办法]
strlen(brackets) > 0)
{
printf("false\n");
}
else
{
printf("true\n");
}
system("pause");
return 0;
}