这是问题的输入和输出格式。 在这种情况下,[]和{}只是可接受的大括号。 假设这个问题可以消除空间字符。 您的解决方案应返回一个字符串列表,其中每个条目对应一行。字符串中不应包含“\ n”字符。
输入:["foo", {"bar":["baz",null,1.0,2]}]
输出:
[
"foo",
{
"bar":
[
"baz",
null,
1.0,
2
]
}
]
这是我的代码我得到分段错误,我是c ++的新手,无法在程序中找到错误请帮助
vector<string> Solution::prettyJSON(string A) {
int tabcount=0,j=0;
vector<string> res;
cout<<"0st check \n";
for(int i=0;A[i];i++){
if(A[i]=='{' || A[i]=='['){
if(i==0)
res[j].push_back(A[i]);
else{
j++;
res[j].insert(0,tabcount,'\t');
res[j].push_back(A[i]);
}
j++;
tabcount++;
}
else {
if(A[i]=='}' || A[i]==']'){
tabcount--;
j++;
res[j].insert(0,tabcount,'\t');
res[j].push_back(A[i]);
j++;
}
else{
if(A[i]==','){
res[j].push_back(A[i]);
j++;
res[j].insert(0,tabcount,'\t');
}
else{
res[j].push_back(A[i]);
}
}
}
}
return res;
}
答案 0 :(得分:0)
首先,请注意有许多C ++ JSON解析和操作以及预处理库,其中一些非常紧凑且易于使用,只占用一个标头。考虑重复其中一个,这将帮助您避免在编写自己的时候会发现的许多陷阱。
现在,我假设你没有调试过这个。例如,通过visual studio运行它会显示崩溃产生的确切行:
res[j].push_back(A[i]);
i
为零,所以这是第一个字符。 j
也为零,但更重要的是res
的大小也为零。这意味着您正试图引用res
中不存在的条目,这当然会导致您的应用程序崩溃。
如果j
等于或大于res.size()
,您将遇到此问题,并且因为您从未将任何条目推送到res
,所以此代码无法正常工作。这可能表明你不熟悉使用向量,但这并不是教你如何做到这一点的地方。
无论如何,作为最小修复,如果我在for循环之前和res.push_back("");
的每个实例之后添加j++
,我会得到以下结果:
[
"foo",
{
"bar":
[
"baz",
null,
1.0,
2
]
}
]