下面是一个完整的C语言程序示例,它使用栈来实现括弧匹配检验: c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 定义栈的数据结构 typedef struct { char *data; int top; int capacity; } Stack; // 初始化栈 void initStack(Stack *stack, int capacity) ...
#include<stdlib.h> charstack[256];//定义一个字符串数组,储存栈 intmain() { inttop=0; charstr[256];//定义字符串 gets(str);//读取字符串 inti=0; while(str[i]!='\0')//当str还没结束,'\0'是结束符 { if(str[i]=='('||str[i]=='[') { stack[++top]=str[i];//进栈 } el...
算法思路: 与上一题差不多,就是在出栈的时候要知道出栈的元素是哪个,我们在pop(STACK *ps,char * val)函数中用*val保存出栈的值,在调用完pop()后,判断一下val的值是不是对应的相反括号即可 溢出判断也是跟上一题一样,如果栈里面是空的此时遇到 ‘)’ 或者‘]’会返回false,直接返回false输出Wrong,栈里面...
}//不匹配就出栈}if(t ==0) printf("OK");//栈空,则匹配成功elseprintf("Wrong");//栈未空,则匹配失败return0; }
c判断括弧是否匹配 这里我没有用堆栈。直接用一个数组input[SIZE]接收用户的输入,在遍历数组,对数组进行操作。已经匹配好的括弧直接用#号覆盖,最后遍历数组。如果数组只有#号,没有其他元素,则匹配。否则不匹配。 1 /* 2 *判断括弧是否匹配 3 */ 4
} else if (c == ']') { // 右中括号"]" if (st.top() != '[') { // 没有与它匹配的"[",该串不匹配 return false; } else { st.pop(); } } else { // 是左括号"("或"[" st.push(c); // 则入栈 } } // end for return (st.size() == 1); // 只剩栈底的...
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。 现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配? 输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 ...
匹配就输出 “OK” ,不匹配就输出“Wrong”。【输⼊样例】[(])【输出样例】Wrong 代码:#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std;char a[256],b[256];//⼀个输⼊的数组,⼀个栈 int main(){ gets...
针对[(] )或([]( )或 ( ( ) ) )这三种错误匹配,从期待匹配的角度描述即为: 来的右括弧不是所期待的; 来的是不速之客; 直到结束,也没有到来所期待的。 这三种情况对应到栈的操作即为: 和栈顶的左括弧不相匹配; 栈中并没有左括弧等在那里; 栈中还有左括弧没有等到和它相匹配的右括弧。点...
假设在表达式中出现下列匹配情况,则为不正确的格式。 [(])或([())或(()]) 结论:检验括号是否匹配的方法可用期待的急迫程度这个概念来描述。 例如,考虑下列括号序列的匹配过程: [ ( [ ] [ ] ) ] 1 2 3 4 5 6 7 8 可见,上述括号的匹配过程正好类似于入栈和出栈的过程。点...