给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。用c++写出来
时间: 2023-03-13 10:10:49 浏览: 142
答:可以使用栈的数据结构来实现。遍历字符串,当遇到“(”,“[”,“{”时,将其压入栈中,当遇到“)”,“]”,“}”时,与栈顶元素比较,如果相同,则弹出栈顶元素;否则,说明不匹配;最后,如果栈为空,说明字符串中的括号匹配;否则,说明不匹配。C语言实现示例:#include<stdio.h>
#define MAX 100
char stack[MAX];
int top = -1; // 压入栈中
void Push(char c)
{
stack[++top] = c;
} // 弹出栈顶元素
void Pop()
{
if(top == -1)
return;
top--;
} // 判断是否匹配,如果匹配返回1,否则返回0
int Match(char c1, char c2)
{
if(c1 == '(' && c2 == ')')
return 1;
else if(c1 == '[' && c2 == ']')
return 1;
else if(c1 == '{' && c2 == '}')
return 1;
else
return 0;
} // 检查字符串中的括号是否匹配
int Check(char str[])
{
int i;
for(i=0; str[i]; i++)
{
if(str[i] == '(' || str[i] == '[' || str[i] == '{')
Push(str[i]);
if(str[i] == ')' || str[i] == ']' || str[i] == '}')
{
if(top == -1)
return 0;
else if( !Match(stack[top], str[i]) )
return 0;
else
Pop();
}
}
if(top == -1)
return 1;
else
return 0;
} // 主函数
int main()
{
char str[MAX];
int flag;
printf("输入字符串:");
scanf("%s",str);
flag = Check(str);
if(flag == 1)
printf("括号匹配\n");
else
printf("括号不匹配\n");
return 0;
}
阅读全文