括号序列合法性判断代码:潜在问题分析、修正及解释,增强程序健壮性
这段代码整体逻辑正确,不过存在一些潜在的小问题,以下是详细分析与相应的修正建议: 1. 缺少输入验证 在 `main` 函数里,代码直接假定输入的 `T` 是一个有效的正整数,并且后续输入的字符串仅包含括号字符。要是输入不符合要求,程序也许会出现未定义行为。 2. 异常输入处理 当输入的字符串包含除括号之外的字符时,程序不会进行特别处理,可能会产生不符合预期的结果。 修正后的代码 ```cpp #include <iostream> #include <stack> #include <string> using namespace std; // 判断字符串是否为合法括号序列 bool isValid(const string& s) { stack<char> st; for (char c : s) { // 只处理括号字符,忽略其他字符 if (c == '(' || c == '[' || c == '{') { st.push(c); } else if (c == ')' || c == ']' || c == '}') { if (st.empty()) return false; char top = st.top(); st.pop(); if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) { return false; } } } return st.empty(); } int main() { int T; // 验证输入的 T 是否为有效的正整数 while (!(cin >> T) || T <= 0) { cout << "输入的测试用例数量必须是正整数,请重新输入: "; cin.clear(); cin.ignore(10000, '\n'); } for (int i = 0; i < T; ++i) { string s; cin >> s; if (isValid(s)) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; } ``` 代码解释 1. `isValid` 函数: - 仅处理括号字符,忽略其他字符。 - 若遇到左括号,将其压入栈中。 - 若遇到右括号,检查栈是否为空,若为空则返回 `false`;若栈不为空,弹出栈顶元素并检查是否匹配,若不匹配则返回 `false`。 - 遍历结束后,若栈为空则返回 `true`,否则返回 `false`。 2. `main` 函数: - 验证输入的 `T` 是否为有效的正整数,若不是则提示用户重新输入。 - 循环读取 `T` 个字符串,调用 `isValid` 函数判断是否为合法括号序列,并输出结果。 通过这些修改,程序的健壮性得到了提升,能够处理异常输入。 ######[AI问答 | 685点数解答 | 2025-12-04 18:51:20]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)54
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)264
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)262
- 求解 1 至 n 内第 k 大孤独数:质数与余数的巧妙探寻(字节豆包 | 298点数解答 | 2025-11-10 20:01:57)155
- 巧判小朋友同桌意愿:满足需求还是无解难题?(字节豆包 | 599点数解答 | 2025-11-16 20:06:12)68
- 巧用代码判断:能否让 2n 个小朋友都拥有满意同桌?(字节豆包 | 445点数解答 | 2025-11-16 20:07:02)80
- JS 代码:判断“red”改值为“green”并弹窗显示结果( | 176点数解答 | 2024-05-20 21:33:04)414
- 用 JS 代码巧妙判断 a 与 b 关系:输出对应结果 ( | 47点数解答 | 2024-05-20 22:10:14)323
- Mac版PS 2019CC:超实用图片美颜增强PS脚本大揭秘!(字节豆包 | 309点数解答 | 2025-02-22 20:49:53)154
- PS 20.0.6 版实用美颜增强脚本大揭秘!(字节豆包 | 192点数解答 | 2025-02-28 11:01:21)233
- PS 20.0.6 实用美颜脚本:含代码及三大使用注意点 (阿里通义 | 680点数解答 | 2025-02-28 14:43:51)222
- Java 实现:轻松生成 5 位数字、大小写字母混合验证码( | 266点数解答 | 2024-03-06 17:39:10)330