c++實現Json庫

liyishui發表於2024-12-07

是的,在很久以前就開始想做這個東西,但是鴿了很久..終於又重新開始學了: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,整體還是簡單的。

相關文章