题目:
7-1 括号匹配 (30 分)
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
输出样例1:
yes
输入样例2:
{[}]
输出样例2:
no
分析:
通过详读题目以及例题我们可以知道:程序会读入随机输入的一串字符串,而当只有 '('和')' 、'['和']' 、 '{'和'}'相匹配的时候输出“yes”,其他情况都会输出“no”。
这时候我们可以采用顺序栈的结构来解决这一个问题:
将所有的左括号(即" ( 、[ 、{ ")存入栈中,遇到右括号(即" )、]、}")时出栈,再判断两者是否匹配。
代码:
#include<iostream> #include<string.h> using namespace std; //定义栈 #define max_size 200//栈的最大容量 typedef char datatype; typedef struct{ datatype zhan[max_size]; int top;//栈顶 }stack; //栈的初始化 void initial(stack &st) { st.top = 0; } //类型为datatype的x入栈 void push(stack &st, datatype x) { //当栈顶和max_size相等时,栈满 if(st.top == max_size){ // cout<<"This stack has already full!"; cout<<"no"; exit(0); }else{ st.zhan[st.top] = x; st.top++; } } //出栈 char pop(stack &st){ if(st.top == 0){ // cout<<"This stack is empty!"; cout<<"no"; exit(0); }else{ st.top--; return st.zhan[st.top]; } } int main(){ stack s; initial(s); /*输入字符串,并将字符串放到字符数组中, 实现能够逐个扫描字符串中的字符,并且不跳过空格符 */ string str; getline(cin, str); char ch[200]={'