思路

我们枚举输入的数组的每个值。

  • 如果该值为 {除第一行以外换一行,然后输出缩进,然后加 22 个空格的缩进。
  • 如果该值为 },减掉 22 个空格的缩进,然后换一行输出缩进和 }
  • 如果该值为 ,,直接输出。
  • 如果该值为数组元素且上一个时 {,,换一行输出缩进和元素。

提醒

这题有 SPJ,第一行不能有换行!

代码

#include<iostream>
using namespace std;
string s;
int tab;
char last='\0';
int main(){
    cin>>s;
    for(int i=0;i<s.length();i++){
        if(s[i]=='{'){
            if(last!='\0'){ //第一行不能有换行
        	    cout<<endl;
            }
            for(int i=1;i<=tab;i++){
                cout<<' ';
            }
            cout<<'{';
            tab+=2;
            last='{';
        }else if(s[i]=='}'){
            tab-=2;
            cout<<endl;
            for(int i=1;i<=tab;i++){
                cout<<' ';
            }
            cout<<'}';
            last='}';
        }else if(s[i]==','){
            cout<<',';
            last=',';
        }else{
            if(last=='{' or last==','){
                cout<<endl;
                for(int i=1;i<=tab;i++){
                    cout<<' ';
                }
            }
            cout<<s[i];
            last=s[i];
        }
    }
    return 0;
}