|
发表于 2023-11-8 10:35:21
|
显示全部楼层
在你的代码中,括号匹配不正确的原因是你没有正确处理所有可能的情况。具体来说,你只检查了右括号,但没有检查左括号是否匹配。因此,即使你的栈为空,也不能保证括号匹配是正确的。
要解决这个问题,你可以使用一个计数器来跟踪左括号的数量。当遇到左括号时,将计数器加1;当遇到右括号时,将计数器减1。如果在遍历完所有字符后,计数器的值为0,则括号匹配是正确的。
下面是修改后的代码:
- #include <bits/stdc++.h>
- using namespace std;
- int main()
- {
- char c;
- stack<char> s;
- int count = 0; // 添加计数器
- while(cin >> c && c != '@')
- {
- if(c == '(')
- {
- s.push(c);
- count++; // 左括号数量加1
- }
- if(c == ')')
- {
- if(!s.empty())
- {
- s.pop();
- count--; // 右括号匹配成功,左括号数量减1
- }
- else
- {
- cout << "NO" << endl;
- return 0;
- }
- }
- }
- if(count == 0 && s.empty()) // 判断左括号数量是否为0且栈为空
- cout << "YES" << endl;
- else
- cout << "NO" << endl;
- }
复制代码
现在,你的代码将正确地检查括号匹配。如果括号匹配正确,它将输出"YES";否则,它将输出"NO"。 |
|