假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。 现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。 输入一个字符串:[([][])],输出:OK。 #include<bits/stdc++.h> using namespace std; stack<long long>a; char s; int main(){ while(cin>>s){ if(s=='('||s=='[') a.push(s); else if(s==')'){ if (a.empty()||a.top()!='('){ cout<<"Wrong"; return 0; } a.pop(); } else { if(a.empty()||a.top()!='['){ cout<<"Wrong"; return 0; } a.pop(); } } cout<<"OK"; return 0; } 为什么输入([]()会出问题
时间: 2024-04-16 09:24:06 浏览: 21
输入 "([]()" 会导致问题的原因是在处理 ")" 时没有正确检查栈是否为空。
在你的代码中,当遇到 ")" 时,会检查栈顶元素是否为 "(",如果不是则输出 "Wrong"。但是,你没有检查栈是否为空,如果栈为空,说明没有与 ")" 匹配的 "(",此时应输出 "Wrong"。
为了修复这个问题,你需要在判断栈是否为空之前,先判断当前字符是否为 ")"。如果是,则检查栈是否为空,如果为空则输出 "Wrong"。
修复后的代码如下所示:
```cpp
#include <bits/stdc++.h>
using namespace std;
stack<char> a;
char s;
int main() {
while (cin >> s) {
if (s == '(' || s == '[') {
a.push(s);
} else if (s == ')') {
if (a.empty() || a.top() != '(') {
cout << "Wrong";
return 0;
}
a.pop();
} else if (s == ']') {
if (a.empty() || a.top() != '[') {
cout << "Wrong";
return 0;
}
a.pop();
}
}
if (!a.empty()) {
cout << "Wrong";
} else {
cout << "OK";
}
return 0;
}
```
现在,对于输入 "([]()",代码会输出 "Wrong",表示括号不匹配。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)