一道关于“括号配对问题”的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中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符
追问太感谢了!解答的好详细,终于想通了!!
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中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符
追问太感谢了!解答的好详细,终于想通了!!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯