c++实现Json库

是的,在很久以前就开始想做这个东西,但是鸽了很久..终于又重新开始学了:p

Part1

task

tutorial里介绍了断言、怎么写宏、简单用cmake编译环境、常用的测试方法(TDD测试、单元测试)等。

任务是:

1. 修正关于 `LEPT_PARSE_ROOT_NOT_SINGULAR` 的单元测试,若 json 在一个值之后,空白之后还有其它字符,则要返回 `LEPT_PARSE_ROOT_NOT_SINGULAR`。
2. 参考 `test_parse_null()`,加入 `test_parse_true()`、`test_parse_false()` 单元测试。
3. 参考 `lept_parse_null()` 的实现和调用方,解析 truefalse 值。

想完成任务看totorial好像没啥用,直接面向目标编程。

1. 修正关于 `LEPT_PARSE_ROOT_NOT_SINGULAR` 的单元测试,若 json 在一个值之后,空白之后还有其它字符,则要返回 `LEPT_PARSE_ROOT_NOT_SINGULAR`。

发现test.c里都是测试样例和一个计算通过率的函数,好像没什么要改的,回去看tutorial,写到:

 任务目标就是改lept_parse,我的思路是先处理空格,再处理值,再处理空格。最后再判断是否为空,但如何判断现在c->json是不是到末尾了?问了chat:用'\0'判断即可,最后写出来觉得可行的

 

 

 

2. 参考 `test_parse_null()`,加入 `test_parse_true()`、`test_parse_false()` 单元测试。

格式很工整,没太懂每一个部分在做什么,先照猫画虎

 

 

3. 参考 `lept_parse_null()` 的实现和调用方,解析 truefalse 值。

继续照猫画虎:

 

在看答案前好奇运行了一下test.c,发现:

haha!开始复盘,校验答案。

 

Solution

第一问的标程是:

我的写法:

 

发现我没判在解析中间的值就出问题的情况,能解析第二个ws的前提是:中间没出问题。重写:

 

 第二问的标程是:

我写的是:

整体差不多,但没懂为什么test_parse_false里v.type初始化默认为LEPT_TRUE

问了chat说如果代码有问题,实际上并不能把v.type修改成false,如果初始化也是false,可能导致问题没法暴露出来。

所以:初始化随便一个值,总之别和目标值一样。

 

第三问的标程是:

我写的是:

 基本差不多,但false是+4啦!

Part1 over,整体还是简单的。

 

posted @ 2024-12-07 18:38  liyishui  阅读(3)  评论(0编辑  收藏  举报