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] = ‘\0‘;
    cout << max_sum << endl;
    cout << ans;
    return 0;
}

原文地址:https://www.cnblogs.com/woxiaosade/p/10472896.html

时间: 2024-10-10 21:20:11

C程序花括号嵌套层次统计(新)的相关文章

PHP变量作用域(花括号、global、闭包)

花括号 很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域. <?php if (True) { $a = 'var a'; } var_dump($a); for ($i = 0; $i < 1; $i++) { $b = 'var b'; for ($i = 0; $i < 1; $i++) { $c = 'var c'; } var_dump($c); } var_dump($b); var_dump($c); ?> 运行结果是: string(5)

TCL 双引号和花括号的区别

用了很一段时间的Modelsim,用TCL脚本仿真,开始注意起来它,看了些资料,有一个问题始终让我很困惑,那就是花括号 的用法,今天Google了一下,觉得有一点豁然了,记录一下.为了不让自己的翻译影响大家理解,先给出原文,再翻译一下. 第一段: THE RULE SQUARE BRACKETS are used to define a block that's run BEFORE the rest of the command on the current line, and the res

简单C编程题-同位相同的N项之和/标准输入花括号成对判断/行号行输出

//求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222 #include <stdio.h> int main() { int a,n,sum; int i,j; sum = 0; printf("请输入项数和a的值"); scanf("%d%d",&a,&n); j = a; for(i = 1;i <= n;i++) { sum = sum+a; a = j

第十四周项目4-2:IDE花括号换行机制

问题及代码: /*  *Copyright (c)2015,烟台大学计算机与控制工程学院  *All rights reserved.  *文件名称:test.cpp  *作    者:陈文青  *完成日期:2015年6月18日  *版 本 号:v1.0  *  *问题描述:读入一个C++程序,使程序中的所有左花括号"{"和右花括号"}"都单独占一行,新程序保存到另一个.cpp文件中,并在屏幕上显示处理过的程序,显示时加上行号. *程序输入:  *程序输出:  */

C语言::验证花括号成对出现

题目要求 编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现. 注意:你不必担心注释内部.字符串常量内部和字符常量形式的花括号. 算法分析 我们先判断左花括号的数量是否相等. 如果左右花括号数量不等,肯定不成对! 如果左右花括号数量相等,一定就成对吗??? 好像也不一定. 我们来举例分析一下,左右花括号相等时可能会出现的情况: 1.{{{{{}}}}}(匹配) 2.{}{}{}{}{}(匹配) ... 3.}}}}}{{{{{(不匹配) 4.{{{{}}}}}{(

*4 通配符及管道与反引号“`”与花括号“{}”的使用

作业4: 一.通配符练习: 1.显示/etc目录下,以字母开头,后面跟了一个非字母及其它任意长度任意字符的文件或目录: ll -dh /etc/[[:alpha:]][^[:alpha:]]* drwxr-xr-x. 6 root root 4.0K 3月   6 17:22 /etc/X11 2.显示/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录: ll -dh /usr/share/man/man[0-9] drwxr-xr-x. 2 root root

一道验证花括号匹配的编程题

//编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现 #include<stdio.h> int main() { int ch=0; int count=0; while((ch=getchar())!=EOF) { if(ch=='{') count++; else if((ch=='}')&&(count==0)) { printf("匹配不成功!\n"); } else if((ch=='}')&&(coun

PHP的大括号(花括号{})使用详解

一.不管什么程序,function name(){}, for(){}, ….这太多了,不说也知道什么用了. 二.$str{4}在字符串的变量的后面跟上{}大括号和中括号[]一样都是把某个字符串变量当成数组处理. 三.{$val}这种情况就是我遇到的问题,这时候大括号起的作用就是,告诉PHP,括起来的要当成变量处理. 如下例子: //The following is okay as it's inside a string. Constants are not //looked for with

常用PHP中花括号使用规则详解

转自http://www.cnblogs.com/jayleke/archive/2011/11/08/2241609.html 1.简单句法规则(用花括号界定变量名,适用于PHP所有版本): $a = 'flower'; echo "She received some $as"; // 无效:字母s会被当成有效的变量名组成元素,但是这里的变量是$a echo "She received some ${a}s"; // 有效 echo "She recei