https://ac.nowcoder.com/acm/contest/3006/C
一个事实是我被题面和题解代码吓着了
事实证明题解做了一个更高难度的版本
我现在也不知道题解代码在干啥
事实证明在出题人去掉若干情况后,这道题也不是很难
只要想做总能啃下来
这种需要自己构造思路方法的模拟题还是贼好的
我的思路
1、# // /* */ 这些涵盖的代码内容直接略过
2、{ } 里面的代码略过
3、处理这一个‘{’ 与 上一个‘}’之间的代码
① 把能去掉的空格都去掉,留下的空格满足后面是字母,前面是字母或者‘*’
② 最后一个‘(’与它前面‘ ’之间的内容就是函数类型和函数名。(这里取最后一个是去掉最前面先声明的函数)
③ 最后一个‘(’和最后一个‘)’之间的代码,以逗号分割,一个一个提取出来即可
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char s[5000],a[5000],b[5000],t[5000]; int main() { bool we=false,st=false,bi=false,br=false,tag; int n=0,sum=0,m=0,k,l,r,blank,len,now,last,th,tmp; while(scanf("%c",&s[++n])!=EOF); for(int i=1;i<=n;++i) { if(s[i]=='#') we=true; else if(s[i]=='/' && s[i+1]=='*') st=true,++i; else if(s[i]=='*' && s[i+1]=='/') st=false,++i; else if(s[i]=='/' && s[i+1]=='/') bi=true,++i; else if(s[i]==' ') a[++m]=' ',we=bi=false; else if(we || st || bi) continue; else if(s[i]=='{') { sum++; if(sum==1) { br=true; k=0; for(int j=1;j<=m;++j) if(a[j]!=' ') b[++k]=a[j]; else if((isalpha(a[j-1]) || a[j-1]=='*') && isalpha(a[j+1])) b[++k]=a[j]; b[k+1]='