括号检查器代码的测试用例不正确。对于“(()”输出应该是“不平衡”,但我正在“平衡”[重复]

2024-01-04

给定一个表达式字符串 exp。检查是否是对和顺序“{“,”}”,”(“,”)”,”[“,”]”表达式中是正确的。 例如,程序应该打印'balanced' for exp = “[()]{}{[()()]()}” and 'not balanced' for exp = “[(])”

Input

输入的第一行包含一个整数 T,表示测试用例的数量。每个测试用例由一串表达式组成,位于单独的行中。

Output

Print 'balanced'如果一对括号是平衡的,则不带引号,否则打印'not balanced'在单独的一行中。

约束条件

1 ≤ T ≤ 100
1 ≤ |s| ≤ 105

Example

Input:

3
{([])}
()
([]

Output

balanced
balanced
not balanced
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;

int main() {
    //code
    int t;cin>>t;
    while(t--) {
        string s;
        stack<char> st;
        int i=0,flag =1;
        getline(cin,s);
        int n = s.size();
        while(s[i] != '\0') {
            if((s[i] == '{') || (s[i] == '[') || (s[i] == '(')) {
                st.push(s[i]);
            }
            else if(!st.empty() && ((st.top() == '{' && s[i] == '}') || 
            (st.top() == '[' && s[i] == ']') || (st.top() == '(' && s[i] == ')'))) st.pop();
            else {
                flag = 0;
                break;
            }
            i++;
        }
        (st.empty() && flag) ? cout<<"balanced\n" : cout<<"not balanced\n";
    }
    return 0;
}

使用调试器单步执行代码,第一次执行循环时,字符串为空。

这是因为cin >> t在第一行的换行符处停止读取,并且第一个getline(cin, s)line 接收一个空字符串。

只需致电getline(cin, dummy_string) after cin >> t阅读该行的其余部分,或切换循环以使用cin >> s反而。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

括号检查器代码的测试用例不正确。对于“(()”输出应该是“不平衡”,但我正在“平衡”[重复] 的相关文章

随机推荐