codeforces gym 100286 I iSharp (字符串模拟)
给定一个字符串。输入是int& a*[]&, b, c*;
输出是
int&&[]* a;
int& b;
int&* c;
输入格式里逗号后面一定有个空格,把字母后面的符号逆序拿到前面来,按每个逗号分隔输出即可。
注意输出格式一定是定义类型+符号+空格+字母或字符串+分号。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> using namespace std; char s[345]; char c[345],cnt1=0; int main() { freopen("isharp.in","r",stdin); freopen("isharp.out","w",stdout); while(gets(s)) { memset(c,0,sizeof(c)); int len=strlen(s); for(int i=0;i<len;i++) { if(s[i]!=' ') c[i]=s[i]; else { cnt1=i; break; } } //cout<<c<<endl;; int ss=cnt1+1; int ee=-1; for(int i=cnt1+1;i<len;i++) { if(s[i]!=','&&s[i]!=';') continue; else { ee=i-1; cout<<c; for(int j=ee;j>=ss;j--) { if(!((s[j]>='a'&&s[j]<='z')||(s[j]>='A'&&s[j]<='Z'))) { if(s[j]!=']') printf("%c",s[j]); else { printf("[]"); j--; } } else { bool first=true; for(int k=ss;k<=j;k++) { if(!((s[k]>='a'&&s[k]<='z')||(s[k]>='A'&&s[k]<='Z'))) printf("%c",s[k]); else if(first) { printf(" %c",s[k]); first=false; } else printf("%c",s[k]); } printf(";\n"); ss=ee+3; i+=2; break; } } } } } return 0; } // int& a*[]&, b, c*;