如:从表达式 x+(y*z)+(m-(3+4)) 中找到3+4 。如果由多个表达式具有相同的最深深度则只需要给出其中一个。
备注:算术表达式本身都是正确的,不要考虑括号不配对等错误表达式的处理。
备注:算术表达式本身都是正确的,不要考虑括号不配对等错误表达式的处理。
/*
* 编程实现,从一个表达式字符串中找到最深层圆括号内的表达式.
* 如: 从表达式 x+(y*z)+(m-(3+4))中找到3+4. 如果由多个表达式具有相同的最深深度则只需要给出其中一个.
* 备注: 算术表达式本身都是正确的,不要考虑括号不配对等错误表达式的处理
*
*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[101];
scanf("%s",s);
int i;
int left = 0, right = 0;
int cur = 0, max = 0;
int len = strlen(s);
for( i=0; i<=len; i++ )
{
if(s[i] == '(')
{
++cur; // 第cur层嵌套的()
if(cur>max) // 在left处更新最深层嵌套的( 位置
{
left = i;
right = 0; // 设right为0, 以控制仅仅记录最深层嵌套的) 位置
max = cur;
}
}
else if(s[i] == ')')
{
if(right==0) // 匹配到),将当前最深层嵌套的) 位置存放在right处; 仅记录最深层嵌套)的位置,其他的) 的位置不记录
{
right = i;
cur = 0; // 清空当前嵌套层数的计数
}
}
}
for(i=left+1; i<=right-1; i++) // 输出结果
putchar(s[i]);
printf(" ");
return 0;
}
* 编程实现,从一个表达式字符串中找到最深层圆括号内的表达式.
* 如: 从表达式 x+(y*z)+(m-(3+4))中找到3+4. 如果由多个表达式具有相同的最深深度则只需要给出其中一个.
* 备注: 算术表达式本身都是正确的,不要考虑括号不配对等错误表达式的处理
*
*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[101];
scanf("%s",s);
int i;
int left = 0, right = 0;
int cur = 0, max = 0;
int len = strlen(s);
for( i=0; i<=len; i++ )
{
if(s[i] == '(')
{
++cur; // 第cur层嵌套的()
if(cur>max) // 在left处更新最深层嵌套的( 位置
{
left = i;
right = 0; // 设right为0, 以控制仅仅记录最深层嵌套的) 位置
max = cur;
}
}
else if(s[i] == ')')
{
if(right==0) // 匹配到),将当前最深层嵌套的) 位置存放在right处; 仅记录最深层嵌套)的位置,其他的) 的位置不记录
{
right = i;
cur = 0; // 清空当前嵌套层数的计数
}
}
}
for(i=left+1; i<=right-1; i++) // 输出结果
putchar(s[i]);
printf(" ");
return 0;
}