洛谷 P8032 题解

题目传送门


题意:

输入一个字符串数组,根据以下方式模拟:

  • 数组的开头和结尾分别用大括号 { 和 } 表示。

  • 每组大括号内有若干个(可能为 $0$)用逗号分隔开来的元素(每个数组的最后一个元素后面没有逗号)。

  • 每个元素可以是一个单词(由小写字母组成的字符串)或一个数组。

并且还要满足以下码风:

  • 遇到单词或大括号时另起一行。

  • 逗号应直接放置于一个数组元素的后面。

  • 每遇到一个 {,增加 $2$ 个空格的缩进。

  • 每遇到一个 },减少 $2$ 个空格的缩进。


思路:

设置循环变量 $i$ 和用于记录缩进数量的变量 $cnt$。
然后根据题意模拟即可。


代码:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
string s;
int i,cnt;	//cnt用于记录缩进的数量
int main(){
    cin>>s;
    for(i=0;i<s.length();i++){
        if(s[i]=='{'){
            for(int k=1;k<=cnt;k++)  cout<<" ";
			cout<<"{"<<endl;
            cnt+=2;
        }
        else if(s[i]=='}'){
            for(int k=1;k<=cnt-2;k++)  cout<<" ";
			cout<<"}";
			if(s[i+1]!=',')	cout<<endl;
            cnt-=2;
        }
        else{
            if(s[i]!=',')	for(int k=1;k<=cnt;k++)  cout<<" ";
            while(s[i]!=',' && s[i]!='}'){
                cout<<s[i];
                i++;
            }
            if(s[i]==',')	cout<<","<<endl;
            else    cout<<endl,i--;

        }
    }
    return 0;
}

本篇题解特别感谢@wangyuhan2010dalao的指点

上一篇:C#操作XML


下一篇:AcWing2014. 岛