C程序花括号嵌套层次统计(新)

Posted woxiaosade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序花括号嵌套层次统计(新)相关的知识,希望对你有一定的参考价值。

【问题描述】

编写程序,统计给定的C源程序中花括号的最大嵌套层次,并输出花括号嵌套序列,该程序没有语法错误。

注意:
1)源程序注释(/* … */)中的花括号应被忽略,不参与统计。
2)源程序中的字符串常量不会出现花括号。

【输入形式】

要检查的C源程序文件名为input.c,在当前目录下。

【输出形式】

向控制台输出花括号的最大嵌套层次数,并在新的一行上按出现的先后顺序输出花括号。

【样例输入】

假如当前目录下input.c文件的内容为:

#include <stdio.h>

main()
{
 int a,b,i,sum1,sum2;

 /*{input}*/
 scanf("%d%d",&a,&b);

 sum1=sum2=0;
 for(i=a;i<=b;i++)
 {
  if(i%2==0)
  {
   sum1+=i;
  }
  else
  {
   sum2+=i;
  }
 }
 /*{output}*/
 printf("Sum1=%d, Sum2=%d",sum1,sum2);
}

【样例输出】

3
{{{}{}}}

【样例说明】

源程序input.c中的花括号的最大嵌套层次为3,所以输出3。然后顺序输出出现的花括号(注释中的花括号应被忽略),即:{{{}{}}}。

【评分标准】

该题要求输出源程序中花括号的最大嵌套层次数及花括号序列,共有5个测试点。上传C语言文件名为exam3.c。

#include <cstdio>
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
int main() {
    freopen("input.c", "r", stdin);
    char t;
    char ans[1000];//储存答案
    stack<char> mystack;
    int len = 0;
    int flag = 0;
    int max_sum = 0;
    int sum = 0;
    while (cin >> t) {
        if (t == /)
            flag++;
        if (flag % 2 == 0) {
            if (t == {) {
                ans[len++] = {;
                mystack.push(t);
                sum++;
            }
            else if (t == }) {
                ans[len++] = };
                mystack.pop();
                sum--;
            }
        }
        max_sum = max(max_sum, sum);
    }
    ans[len] = ;
    cout << max_sum << endl;
    cout << ans;
    return 0;
}

 

以上是关于C程序花括号嵌套层次统计(新)的主要内容,如果未能解决你的问题,请参考以下文章

小程序各种功能代码片段整理---持续更新

获取所有嵌套的花括号

给定JSP代码如下所示,在括号处编写语句,可以使得程序运行后该页面输出的结果是1。

为啥将 C 代码块用花括号括起来?

在C语言中,if和else if是否在不加花括号的情况下也是一个复合语句

如果没有花括号并在换行后返回,那么这个带有“空”的 C 程序会发生啥?