题目传送门
牛牛战队有一门课程叫做软件工程综合实践,这门课要求大家写一个简单的C语言的IDE。牛牛战队已经十分熟悉gcc的相关命令,也知道gdb的调试命令,再借助QT自带的代码亮壳文字框,就很快的把主要功能完成了。现在他们想多做一些创新功能,来获得更高的分数。
他们想到,在很多编译器中,都有查看现在所有函数的功能,如下图所示:
在这个框的左侧,列出了所有的函数和参数列表。现在牛牛战队的成员也想实现这个功能,请你帮帮他吧。
输入将给出一个在C99标准下可以正常编译运行的C语言代码,同时此份代码具有以下约束:
按照以下的格式一行输出一个代码中出现的函数,你可以以任意顺序输出各个函数,每个函数仅可被输出一次。
返回类型名(包括void) 函数名(参数1类型,…,参数n类型)
类型里如有空格,每处最多保留一个空格。
#include
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()
#include
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);
}
}
}