1 条题解
-
0
简单解题思路
问题描述
给定一段 JSON 格式的代码(可能没有缩进或格式混乱),要求:
- 格式化输出,使其符合标准的缩进和换行规则。
- 处理大括号
{}、分号;、逗号,等符号,并在适当位置添加缩进和换行。
核心思路
-
逐字符解析输入:
- 使用
getline()逐行读取输入,再逐个字符处理。 - 遇到
{、}、;、,等关键符号时,调整缩进或换行。
- 使用
-
缩进控制:
- 用
level变量记录当前缩进层级(遇到{时level++,遇到}时level--)。 - 每层缩进用 4 个空格 表示。
- 用
-
特殊符号处理:
{:换行并增加缩进。}:减少缩进并换行。;:换行并保持当前缩进。,:正常输出,后面加一个空格。
-
跳过空白字符:
- 忽略输入中的空格和制表符(
ASCII 9)。
- 忽略输入中的空格和制表符(
关键代码解释
-
初始处理:
- 跳过第一个
{,并手动输出格式化后的{\n(带缩进)。
- 跳过第一个
-
字符分类处理:
{→ 换行 + 增加缩进。}→ 减少缩进 + 换行。;→ 换行。,→ 输出,(逗号 + 空格)。- 其他字符 → 直接输出(必要时先补缩进)。
-
终止条件:
- 当
level == 0(所有{}匹配完成),退出循环。
- 当
示例
- 输入(混乱的 JSON):
{a{b;c,d}e;} - 输出(格式化后):
{ a { b; c, d } e; }
总结
- 核心逻辑:通过
level控制缩进,按符号类型决定换行和空格。 - 关键技巧:用
flag标记是否需要补缩进,避免重复缩进。 - 适用场景:JSON/代码格式化工具、编译器预处理等。
#include <iostream> #include <cstdio> #include <string> using namespace std; //英语 看博友分析 抄博友程序 模拟 背 int main() { //freopen("1896.txt","r",stdin); int level=1; while(getchar()!='{');//抄博友程序 printf("{\n ");//抄博友程序 int flag=false; string data; while(getline(cin,data)) { int len=data.length(); for(int i=0;i<len;i++) { if(data[i]==' '||data[i]==9)//抄博友程序 ascii 9 水平制表符 { }else if(data[i]=='{') { printf(" {\n");//抄博友程序 PE level++; /* for(int i=0;i<level;i++)//ac { printf(" "); }*/ flag=true; }else if(data[i]==';') { printf(";\n"); flag=true; }else if(data[i]=='}') { level--; for(int i=0;i<level;i++) { printf(" "); } printf("}"); flag=false;//抄博友程序 }else if(data[i]==',') { printf(", "); }else { if(flag) { for(int i=0;i<level;i++) { printf(" "); } flag=false; } printf("%c",data[i]); } } if(level==0) { break; } } printf("\n"); return 0; }
- 1
信息
- ID
- 897
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者