永发信息网

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

答案:1  悬赏:80  手机版
解决时间 2021-02-15 11:34
  • 提问者网友:相思似海深
  • 2021-02-14 16:44
一道关于“括号配对问题”的C++编程题 没看懂答案(涉及到容器)
最佳答案
  • 五星知识达人网友:duile
  • 2021-02-14 17:16
这样的匹配是用了栈的思想。
if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2)){
    vec.pop_back();
    vec.pop_back();
}查一下ASCII码的表,你会发现
(和)的码值差1

[和],{和}码值差2
()与[]{}的值差得很远
vec.back()-1 == *(vec.end()-2是用vec中的最后一个元素值减1和vec中倒数第二个元素比较,如果相等,说明这是(),配对成功,让配对元素出栈,继续检查下面的字符
同理,vec.back()-2 == *(vec.end()-2)是用vec中的最后一个元素值减2和vec中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符
追问太感谢了!解答的好详细,终于想通了!!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯