东莞中小型网站建设,呼和浩特网络推广公司,游戏推广好做吗,做网站的排名使用栈检查括号的合法性 思路讲解#xff1a;首先从数组数组0下标开始#xff0c;如果是左括号直接无脑压入栈#xff0c;直到出现右括号开始判断合法与否。遇到右括号分两种情况#xff0c;第一种是空栈的情况#xff0c;也就是说我们第一个字符就是右括号#xff0c;那…使用栈检查括号的合法性 思路讲解首先从数组数组0下标开始如果是左括号直接无脑压入栈直到出现右括号开始判断合法与否。遇到右括号分两种情况第一种是空栈的情况也就是说我们第一个字符就是右括号那么我们可以直接判定为非法返回false退出第二种情况是前面压入了一堆的左括号终于碰上了一个右括号我们需要判定的是这个右括号是否和最近的左括号匹配也就是是否和栈顶存的左括号匹配【注意这里的栈永远只会存入左括号】如果匹配则执行【栈里面的左括号】出栈操作相当于消除了一对括号后续执行循环依次操作如果每对括号都能消除到最后栈会变成空栈那就代表这一堆的括号都是合法的那就输出success如果没把栈排空就说明匹配不成功则输出failure表明括号不合法。
#includeiostream
#includestring.h
#includestdio.h
#includestdlib.h
#includestack// stack from standard template library(STL)
using namespace std;bool Check (char C[],int length){stackchar S;for(int i0;ilength;i){if(C[i] (||C[i] [||C[i] {){S.push(C[i]);}else if(C[i] )||C[i] ]||C[i] }){if(S.empty()){printf(空栈进右括号必错不合法\n);return false;}else if(C[i] )S.top() () S.pop();if(C[i] ]S.top() [) S.pop();if(C[i] }S.top() {) S.pop();}}return S.empty();
}
int main(){char C[51];printf(Enter a string: );gets(C);if(Check(C,strlen(C)))printf(success!);elseprintf(failure!);}