大众信息网

一道关于“括号配对问题”的C++编程题 没看懂答案(涉及到容器)

答案:2  mip版
解决时间 2021-03-04 14:38
  • 提问者网友:阳光在浪尖跳动
  • 2021-03-03 13:46
题目如下

有个解法如下

运行正确,答案是正确的。
我没看懂最中间的那个判断是什么意思
if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2))
{
vec.pop_back();
vec.pop_back();
}
为什么要做这样的比较 求解惑。






最佳答案
  • 二级知识专家网友:在時光深處躲貓貓
  • 2021-03-03 14:11
这样的匹配是用了栈的思想。
if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2)){
    vec.pop_back();
    vec.pop_back();
}查一下ASCII码的表,你会发现
1. (和)的码值差1

2. [和],{和}码值差2
3. ()与[]{}的值差得很远
vec.back()-1 == *(vec.end()-2是用vec中的最后一个元素值减1和vec中倒数第二个元素比较,如果相等,说明这是(),配对成功,让配对元素出栈,继续检查下面的字符
同理,vec.back()-2 == *(vec.end()-2)是用vec中的最后一个元素值减2和vec中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符
全部回答
  • 1楼网友:对温柔懂得不多
  • 2021-03-03 15:20
表示没有参数. int main()这样 main还有一种形式,就是 main(int argc,char *argv[]) 这种形式是用来实现在命令行模式下运行此程序时,可以带上参数
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯