洛谷 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的指点

posted @   Black--Panda  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示