给定一个表达式字符串 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(使用前将#替换为@)