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()` 的实现和调用方,解析 true 和 false 值。
想完成任务看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()` 的实现和调用方,解析 true 和 false 值。
继续照猫画虎:
在看答案前好奇运行了一下test.c,发现:
haha!开始复盘,校验答案。
Solution
第一问的标程是:
我的写法:
发现我没判在解析中间的值就出问题的情况,能解析第二个ws的前提是:中间没出问题。重写:
第二问的标程是:
我写的是:
整体差不多,但没懂为什么test_parse_false里v.type初始化默认为LEPT_TRUE
问了chat说如果代码有问题,实际上并不能把v.type修改成false,如果初始化也是false,可能导致问题没法暴露出来。
所以:初始化随便一个值,总之别和目标值一样。
第三问的标程是:
我写的是:
基本差不多,但false是+4啦!
Part1 over,整体还是简单的。