2020牛客寒假算法基础集训营5.C——C语言IDE超级大模拟

Posted Nirvana柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020牛客寒假算法基础集训营5.C——C语言IDE超级大模拟相关的知识,希望对你有一定的参考价值。


​题目传送门​


题目描述

牛牛战队有一门课程叫做软件工程综合实践,这门课要求大家写一个简单的C语言的IDE。牛牛战队已经十分熟悉gcc的相关命令,也知道gdb的调试命令,再借助QT自带的代码亮壳文字框,就很快的把主要功能完成了。现在他们想多做一些创新功能,来获得更高的分数。

他们想到,在很多编译器中,都有查看现在所有函数的功能,如下图所示:

2020牛客寒假算法基础集训营5.C——C语言IDE【超级大模拟】_c++


在这个框的左侧,列出了所有的函数和参数列表。现在牛牛战队的成员也想实现这个功能,请你帮帮他吧。


输入描述:

输入将给出一个在C99标准下可以正常编译运行的C语言代码,同时此份代码具有以下约束:

  • 除引用头文件外,没有其他的编译预处理部分,如:#if,#ifdef,#ifndef,#else,#elif,#endif,#define,#undef,#error,#pragma,_Pragma,#line等。
  • 所有的函数的参数与返回值内不会出现任何形式的数组类型,如:char a[]等,如果有指针,保证指针的一定紧跟在类型名后,如char*,long long*等。保证不会出现函数指针。
  • 由单引号修饰的字符不可能是,,(,),或"。
  • 由双引号修饰的字符串内一定不包含,,(,),‘或",也不包含’/’,’/’,’//的子串。
  • 不会出现函数内嵌套函数的情况。
  • 不会在/*/内出现/*/的嵌套结构。
  • 不会把一句代码拆成两行写。
  • main函数的返回值一定是int类型。当一个函数没有返回值时,一定有前置void标识。
  • 程序内不会出现const标识符。
    输入数据大小保证小于10KB。

输出描述:

按照以下的格式一行输出一个代码中出现的函数,你可以以任意顺序输出各个函数,每个函数仅可被输出一次。

返回类型名(包括void) 函数名(参数1类型,…,参数n类型)
类型里如有空格,每处最多保留一个空格。


输入

#include <stdio.h>

int plus(int a, int b)

return a + b;

int main()

int a,b;
scanf("%d%d", &a, &b);
printf("%d\\n", plus(a, b));
return 0;

输出

int plus(int,int)
int main()


题解

  • emmm,模拟就完了

AC-Code

#include<bits/stdc++.h>

bool P, O, U, S, e;
char s[1 << 17], T[1 << 17], A[1 << 17], c;
int B, C, M, L, N, i, I;
int main()
while (~(c = getchar())) s[N++] = c;
for (i = 0; i < N; ++i)
if (P)
if (s[i] == \\n) P = O = 0;

else if (O)
if (s[i] == \\n) O = 0;

else if (U)
if (s[i] == * && s[i + 1] == /)
U = 0; ++i;


else if (L)
if (s[i] == )++L;
if (s[i] == )--L;

else
if (s[i] == #)P = 1;
else if (s[i] == / && s[i + 1] == /) O = 1, ++i;
else if (s[i] == / && s[i + 1] == *) U = 1, ++i;
else if (s[i] == ) ++L;
else T[B++] = s[i];
if (s[i] == )
for (S = I = 0; I < B; ++I)
if (S)
if (T[I] == )) S = 0;
A[C++] = T[I];
if ((isspace(A[C - 2]) || A[C - 2] == , || A[C - 2] == () && isspace(A[C - 1])) --C;
if (T[I] == , || T[I] == ))
e = 0;
while (A[C - 1] != ( && !(e && isspace(A[C - 1])))
if (isalpha(A[C - 1]))e = 1; A[C - 1] = 0, --C;

if (isspace(A[C - 1])) --C;
A[C++] = T[I];


else
A[C++] = T[I];
if (isspace(A[C - 1]) && isspace(A[C - 2])) --C;
if (C == 1 && isspace(A[0])) --C;
if (T[I] == ()
while (isspace(A[C - 2])) A[C - 2] = A[C - 1], --C;
S = 1;



while (isspace(A[C - 1])) A[--C] = 0;
if (strlen(A) > 4 && strchr(A, () != NULL) puts(A);
C = 0, memset(A, 0, 64);

if (s[i] == || s[i] == ;) B = 0, memset(T, 0, 64);




以上是关于2020牛客寒假算法基础集训营5.C——C语言IDE超级大模拟的主要内容,如果未能解决你的问题,请参考以下文章

2022牛客寒假算法基础集训营3全部题解

2022牛客寒假算法基础集训营3全部题解

2022牛客寒假算法基础集训营3题解 BCEFGHIJK

2020牛客寒假算法基础集训营3——I.牛牛的汉诺塔记忆化

2020牛客寒假算法基础集训营6.C——汉诺塔贪心 & Dilworth定理 & 二分求上升子序列最小化分数

2020牛客寒假算法基础集训营4.B——括号序列STL