2020牛客寒假算法基础集训营5 C C语言IDE

https://ac.nowcoder.com/acm/contest/3006/C

 

一个事实是我被题面和题解代码吓着了

事实证明题解做了一个更高难度的版本

我现在也不知道题解代码在干啥

事实证明在出题人去掉若干情况后,这道题也不是很难

只要想做总能啃下来

这种需要自己构造思路方法的模拟题还是贼好的

 

我的思路

1、#  //  /* */ 这些涵盖的代码内容直接略过

2、{ } 里面的代码略过

3、处理这一个‘{’ 与 上一个‘}’之间的代码

     ① 把能去掉的空格都去掉,留下的空格满足后面是字母,前面是字母或者‘*’

     ② 最后一个‘(’与它前面‘\n’之间的内容就是函数类型和函数名。(这里取最后一个是去掉最前面先声明的函数)

     ③ 最后一个‘(’和最后一个‘)’之间的代码,以逗号分割,一个一个提取出来即可

 

#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]=='\n') a[++m]='\n',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]='\0';
                if(strrchr(b+1,'(')==NULL) continue; 
                l=strrchr(b+1,'(')-b;
                blank=len=0;
                for(int j=l;j && b[j]!='\n';--j)
                {
                     t[++len]=b[j];
                     if(b[j]==' ') blank++;
                }
                reverse(t+1,t+len+1);
                last=l;
                while(strchr(b+last+1,',')!=NULL)
                {
                    now=strchr(b+last+1,',')-b;
                    tmp=now;
                    while(b[now]!=' ') now--;
                    now--;
                    th=1;
                    t[len+th]=',';
                    for(int j=now;j>last;--j)
                    {
                        ++th;
                        t[len+th]=b[j];
                    }
                    reverse(t+len+1,t+len+th+1);
                    len+=th;
                    last=tmp;
                }
                r=strrchr(b+1,')')-b;
                while(b[r]!=' ') r--;
                r--;
                th=0;
                for(int j=r;j>last;--j)
                {
                    ++th;
                    t[len+th]=b[j];
                }
                reverse(t+len+1,t+len+th+1);
                len+=th;
                t[++len]=')';
                t[len+1]='\0';
                printf("%s\n",t+1);
                m=0;
            }
        }
        else if(s[i]=='}')
        {
            sum--;
            if(!sum) br=false;
        }
        else if(br) continue;
        else a[++m]=s[i];
    }
}

 

posted @ 2020-02-24 16:23  TRTTG  阅读(240)  评论(0编辑  收藏  举报