给一个字符串,那这个程序是可以检测你的字符串中所含的括号是否匹配。
原理是:我们从左向右遍历字符串,如果我们遇到左括号如‘(’,我们就将这个左括号进栈,如遇到右括号‘(’,我们就将栈顶元素与该右括号比较,看他们是否匹配,若匹配,则让栈顶元素出栈,若不匹配,则就输出相应的提示信息
void IsMatch(char* str)//判断括号是否匹配,其实没必要用老师的测试。
当然苦括号有大括号,中括号,小括号,但没关系,这些,我的程序都可以检测的出来。
void IsMatch(char* str)//判断括号是否匹配,其实没必要用老师的测试。
{
assert(str);
int len = strlen(str);
Stack s;
StackInit(&s);
int size=0;//栈中有效元素的个数
int i = 0;
char top = 0;
int left = 0;//记录字符串中左括号的个数
int right = 0;//记录字符串中右括号的个数//")abcd]p"//"([]){}";
for (i = 0; i < len; i++)//执行完了之后再上去循环
{
if (str[i] == '(' || str[i] == '{' || str[i] == '[')
{
StackPush(&s, str[i]);
left++;
}
else//判断括号是否匹配
{
if (!StackEmpty(&s))
{
top = StackTop(&s);
if ((top == '(' && str[i] == ')') || (top == '{' && str[i] == '}') || top == '['&&str[i] == ']')//判断栈顶元素与当前元素是否匹配
{
StackPop(&s);
}
}
}
if (str[i] == ']' || str[i] == ')' || str[i] == '}')
{
right++;
}
}
size = StackSize(&s);
printf("%d\n", size);
if (0 == size&&0==left&&0==right)
{
printf("您的输入中不含有括号");
}
if (0 == size&&left==right)
{
printf("该字符串的左右括号匹配");
}
if (size != 0&&left>right)
{
printf("首先该字符串中的括号是不匹配的且该字符串的左括号多于右括号");
}
if (0 == size && left<right)
{
printf("首先该字符串中的括号是不匹配的且该字符串的右括号多于左括号");
}
}
如果有不完善的,请大家多多指正。
栈的应用之括号匹配问题
原文作者:括号匹配问题
原文地址: https://blog.csdn.net/weixin_40797414/article/details/80490630
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/weixin_40797414/article/details/80490630
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。