/*
判断if语句中的括号描述:编程的时候,if条件里面的"("、")"括号经常出现不匹配的情况导致编译不过,
请编写程序检查输入一行if语句中的圆括号是否匹配正确,同时输出语句中出现的左括号数量和右括号数量。
如if((a==1) && (b==1))是正确的,而if((a==1))&&(b==1))是错误的。
备注:只检查圆括号合法性,不检查其他括号和语句本身语法合法性。
另外,if语句最外层至少有一对括号,如if (a==b) && (c!=d) 也是不正确的。
运行时间限制:无限制内存限制:无限制输入:一行if语句字符串输出:
判断括号语法是否正确,正确输出RIGHT,错误输出WRONG,
同时输出左括号数量和右括号数量,以空格隔开。如:RIGHT 2 3,WRONG 1 1。
样例输入:if((a==1) && (b==1))样例输出:RIGHT 3 3答案提示:对括号的处理可以使用堆栈的原理,先进后出。注意if语句至少有一对括号。
*/
#include<iostream>
using namespace std;
bool flag;
void judge( char * inputstr , int & left_num , int & right_num ) {
char *q;
q = inputstr;
int a[ 100 ];
int l, r;
int length = 0;
while( *q != '\0' ) {
if( *q == '(' ) {
a[ length ++ ] = -1;
}
if( *q == ')' ){
a[ length ++ ] = 1;
}
q ++;
}
int i;
int sum = 0;
flag = true;
for( i = 0 ; i < length ; i ++ ) {
sum += a[ i ];
if( ( ( sum == 0 ) && ( i < length - 1 ) ) || ( sum > 0 ) ) {
flag = false;
}
}
if( flag ) {
if( sum == 0 ) {
flag = true;
}
else {
flag = false;
}
}
l = 0;
r = 0;
for( i = 0 ; i < length ; i ++ ) {
if( a[ i ] == -1 ) {
l ++;
}
else {
r ++;
}
}
left_num = l;
right_num = r;
if( l == 0 && r == 0 ) {
flag = false;
}
}
int main() {
char inputstr[ 100 ];
int left_num = 0;
int right_num = 0;
gets( inputstr );
judge( inputstr , left_num , right_num );
if( flag ) {
cout << "RIGHT" << " " << left_num << " " << right_num << endl;
}
else {
cout << "WRONG" << " " << left_num << " " << right_num << endl;
}
}
括号匹配问题
最新推荐文章于 2020-09-10 18:07:10 发布