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

恢弘志士之气,不宜妄自菲薄。这篇文章主要讲述2020牛客寒假算法基础集训营5.C——C语言IDE超级大模拟相关的知识,希望能为你提供帮助。


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


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

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

输入描述:
输入将给出一个在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;
elseT[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);







    推荐阅读