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
- 上传者