给出一个表达式字符串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;
}
答案 0 :(得分:0)
使用调试器逐步执行代码,第一次通过循环,您的字符串为空。
这是因为cin >> t
停止读取第一行的换行符,而第一行getline(cin, s)
接收到一个空字符串。
在getline(cin, dummy_string)
之后只需调用cin >> t
即可读取其余部分,或者将循环切换为使用cin >> s
。