标签:sqs ror length += 标记 最大 new 匹配 代码实现
题目:
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
如果括号配对,输出yes,否则输出no。
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 #define OVERFLOW 1 5 #define ERROR 0 6 #define OK -2 7 #define MAXSIZE 100 8 typedef int SElemType; 9 typedef int Status; 10 typedef struct//顺序栈的定义 11 { 12 SElemType *base;//栈底指针 13 SElemType *top;//栈顶指针 14 int stacksize;//栈可用的最大容量 15 }SqStack; 16 Status InitStack(SqStack &S)//顺序栈的初始化 17 { 18 S.base=new SElemType[MAXSIZE]; 19 if(!S.base) exit(OVERFLOW);//存储分配失败 20 S.top=S.base;//空栈 ,top 初始化 base 21 S.stacksize=MAXSIZE;//stacksize 置为栈的最大容量MAXSIZE 22 return OK; 23 } 24 bool StackEmpty(SqStack S)//判断是否栈空 25 { 26 if(S.top==S.base) return true; 27 else return false; 28 } 29 Status Push(SqStack &S,SElemType x)//入栈 30 { 31 if(S.top-S.base==S.stacksize) return ERROR;//栈满 32 *S.top++=x;//元素e压入栈顶,栈顶指针加1 后置自加 *S.top=e;S.top++; 33 return OK; 34 } 35 Status POP(SqStack &S,SElemType &x)//出栈 36 { 37 if(S.top==S.base) return ERROR;//栈空 38 x=*--S.top;//栈顶指针减1,将栈顶元素赋给e 前置 --S.top;e=*S.top; 39 return OK; 40 } 41 SElemType GetTop(SqStack S)//取栈顶元素 42 { 43 if(S.top!=S.base) return *(S.top-1); 44 } 45 int main() 46 { 47 int flag = 1;//需要一个标记 48 SqStack S; 49 InitStack(S); 50 SElemType x; 51 52 char ch[100];//采用字符数组 53 cin.getline(ch,100); 54 int length=0; 55 for(int i=0;ch[i]!=‘\0‘;i++) 56 { 57 length++; 58 } 59 60 for(int i=0;i<length;i++)//遍历每一个字符 61 { 62 switch(ch[i]) 63 { 64 case ‘{‘: 65 // Push(S,ch[i]); 66 // break; 67 case ‘(‘: 68 // Push(S,ch[i]); 69 // break; 70 case ‘[‘: 71 Push(S,ch[i]); 72 break; //退出switch语句,不会退出外面的循环结构 73 case ‘)‘: 74 if(!StackEmpty(S) && GetTop(S)==‘(‘) 75 POP(S,x); 76 else{flag = 0; 77 cout<<"no"; 78 return 0; 79 } 80 break; 81 case ‘]‘: 82 if(!StackEmpty(S) && GetTop(S)==‘[‘) 83 POP(S,x); 84 // else 85 // flag = 0; 86 else{flag = 0; 87 cout<<"no"; 88 return 0; 89 } 90 break; 91 case ‘}‘: 92 if(!StackEmpty(S) && GetTop(S)==‘{‘) 93 POP(S,x); 94 else{flag = 0; 95 cout<<"no"; 96 return 0; 97 } 98 break; 99 } 100 } 101 if(flag && StackEmpty(S)) cout<<"yes"; 102 else cout<<"no"; 103 return 0; 104 }
2.分析总结:多思考,多尝试,多回顾总结
标签:sqs ror length += 标记 最大 new 匹配 代码实现
原文地址:https://www.cnblogs.com/me-moirs/p/12797508.html