题目描述:
输入一个字符串,其中有普通的字符与括号(包括(, ), [, ]),要求验证括号是否匹配,若匹配输出0,否则输出1.
输入:
dfa(sdf)df[dfds(dfd)]
输出:
0
代码:
#include <iostream>
using namespace std;
int match(char* str, int len)
{
int i = 0, j = 0;
char* kuohao=(char*)malloc(len*sizeof(char));
for (i = 0; i < len; i++)
{
if (str[i] == '(' || str[i] == '[' || str[i] == ')' || str[i] == ']')
{
kuohao[j] = str[i];
++j;
}
}
kuohao[j] = '\0';
cout << kuohao << endl;
char* heap = (char*)malloc(j*sizeof(char));
int k = 0;
for (i = 0; i < j; i++)
{
if (str[i] == '(' || str[i] == '[')
{
heap[k] = str[i];
k++;
}
else if (str[i] == ')')
{
if (heap[k - 1] == '(')
k--;
else
return 1;
}
else if (str[i] == ']')
{
if (heap[k - 1] == '[')
k--;
else
return 1;
}
}
return 0;
}
int main()
{
char temp;
char str[100];
int i = 0;
temp = getchar();
while (temp != '\n')
{
str[i] = temp;
i++;
temp = getchar();
}
str[i] = '\0';
int flag = match(str, i);
cout << flag << endl;
cin.get();
return 0;
}
参考代码:
#include <iostream>
using namespace std;
int main()
{
char a[100],c;
int i=0,flag=0;
c=getchar();
while(c!='\n'&&flag==0)
{
switch(c)
{
case('('):case('['):
a[i]=c;
i++;
break;
case(')'):
if(a[i-1]=='(')
{
a[i-1]='\0';
i--;
break;
}
else
{
flag=1;
break;
}
case(']'):
if(a[i-1]=='[')
{
a[i-1]='\0';
i--;
break;
}
else
{
flag=1;
break;
}
}
c=getchar();
}
cout<<flag<<endl;
return 0;
}