华为机试——括号匹配
来源:互联网 发布:暴雪 知乎 编辑:程序博客网 时间:2024/06/08 11:10
#include<iostream>#include<string>using namespace std;int main(){ string str; getline(cin,str); int len=str.size(); //统计左右括号数 int cntL,cntR; cntL=cntR=0; for(int i=0;i<len;i++) { if(str[i]=='(') cntL++; if(str[i]==')') cntR++; } /* 情况1:左右括号数目不等,如if(a(b),if(abc, if abc) 情况2:左右括号数均为0,如if abc 打印错误信息,退出 */ if((cntL!=cntR) ||(cntL==0)) { cout<<"WRONG "<<cntL<<" "<<cntR<<endl; return 0; } //情况3:左右括号匹配错误,如if((a)b)c(d) //情况4:最外层不是一对括号,如if(a)(b) int k=0; //堆栈计数器,k=0表示栈空;入栈k++,出栈k-- int popK=0; //出栈计数器,用于判断出栈至空时,是否右括号已经计完//如果空栈情况下,还遇到出栈的情况,说明此时右括号先出现不匹配; //如果还未到最后一个右括号,栈已空,说明不满足“最外层至少一对括号”的情况 for(int i=0;i<len;i++) { if(str[i]=='(') //遇到左括号,入栈,即k++ { k++; } if(str[i]==')') //遇到右括号,出栈 { if(k==0) //如果出栈是,栈已空,说明右括号早于左括号出现,不匹配,打印错误信息并退出 { cout<<"WRONG "<<cntL<<" "<<cntR; return 0; } k--; //如果不符合上述情况,则出栈;不必用else popK++; //出栈计数器递增 if(k==0) //如果出栈后,导致栈空,则判断出栈计数器是否等于右括号总数 { if(popK<cntR) //如果出栈计数器小于右括号总数,说明不满足“”最外层至少一对括号”的情况,打印错误信息并退出 { cout<<"WRONG "<<cntL<<" "<<cntR<<endl; return 0; } } } } cout<<"RIGHT "<<cntL<<" "<<cntR; return 0;}
0 0
- 华为机试——括号匹配
- 华为机试—括号匹配
- 华为机试—括号匹配判断[去多余括号]
- 华为机试——字符串中括号是否匹配
- 华为机试之括号匹配
- 华为机试练习---括号匹配问题
- 华为机试之括号匹配
- 括号匹配——2017华为招聘机试题
- 华为机试 - 判断if语句括号是否匹配
- 华为机试题二括号的匹配
- 栈——括号匹配
- 数据结构——括号匹配
- 栈——括号匹配
- stl——括号匹配
- 顺序栈—括号匹配
- 华为机试——含有通配符的字串匹配
- 华为的一道括号匹配题目
- 华为编程大赛之括号匹配
- url转码 解码操作
- Cocos-x :从C++过渡到Lua
- input怎么限制只能输入数字?
- 关于Windows和Linux下.txt文件换行符的处理
- STM32学习【1】ERROR:RAM check failed @ADDRESS 0x20000000
- 华为机试——括号匹配
- java包编译问题
- Fuel 管理节点
- 实验11-1-7 藏头诗 (15分)
- Linux进程与子进程
- Linux shell 学习
- Apache整体分析--基础
- 使用Gitlab一键安装包后的日常备份恢复与迁移
- 【主席树】BZOJ 1901 Dynamic Rankings