测试用例对于括号检查器代码不正确。对于'(()'输出来说,'不平衡'但是我正在'平衡'

时间:2020-05-14 08:39:25

标签: c++ string stack

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

输入

输入的第一行包含一个整数T,它表示测试用例的数量。每个测试用例在单独的一行中都包含一个表达式字符串。

输出

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

约束

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

示例

输入:

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

输出

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;
}

1 个答案:

答案 0 :(得分:0)

使用调试器逐步执行代码,第一次通过循环,您的字符串为空。

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

getline(cin, dummy_string)之后只需调用cin >> t即可读取其余部分,或者将循环切换为使用cin >> s

相关问题