字符串以#结尾,若匹配则输出1,否则输出0
算法思想:检测字符串,如果为左括号就进入栈,如果为右括号就与栈顶元素匹配,如果成功则栈顶元素出栈,否则返回匹配失败结果,字符串扫描结束时如果栈内为空则全部匹配成功,若栈中还有剩余的左括号,则说明未全部匹配。
特殊情况:如"( ) ] { } "在这种情况下,先检测到' ( '压入栈中,检测到' ) '匹配成功,令栈顶元素出栈,此时继续检测字符串,遇到' ] ',此时栈内为空,而调用top函数会使程序无法进行,因此在检测到右括号时,还需要判断栈是否为空,若为空可直接返回匹配失败。
完整代码:#include运行结果:#include using namespace std; int main() { stack Rbrace; char temp; while(1){ cin>>temp; if(temp == '#')//结束输入 break; if((temp == '(')||(temp == '{')||(temp == '['))//左括号则存入栈中 Rbrace.push(temp); //如果为右括号就与栈顶元素匹配 if(temp == ')') { if(Rbrace.empty())//检测栈是否为空 { cout<<'0'; return 0; } else if(Rbrace.top() != '(')//检测是否匹配 { cout<<'0'; return 0; } else Rbrace.pop();//匹配成功就使栈顶元素出栈,继续扫描字符串 } if(temp == '}') { if(Rbrace.empty()) { cout<<'0'; return 0; } else if(Rbrace.top() != '{') { cout<<'0'; return 0; } else Rbrace.pop(); } if(temp == ']') { if(Rbrace.empty()) { cout<<'0'; return 0; } else if(Rbrace.top() != '[') { cout<<'0'; return 0; } else Rbrace.pop(); } } //字符串扫描结束时如果栈内为空则全部匹配成功 if(Rbrace.empty()) cout<<1; else cout<<0; return 0; }



