我工作的一種方式,一個字符串,這樣寫鍵值數據:ALGO - 鍵值表達式解析(C)
{k1=v1__k2=v2__k3=v3}
不是什麼大不了的解析,但問題變大時,我想補充的可能性,寫一組鍵值爲關鍵的值,如:
{k1=v1__k2={k21=v21__k22=v22}__k3=v3}
而且,這將是最好啓用的可能性,以增加更多的深處,我結構,例如:
{k1=v1__k2=v2__k3={k31={k311=v311__k312=v312__k313={k3131=v3131}}__k32=v32}
我試着用C語言來解析它,但用簡單的方法解析它就變得很難了(split __和{}個字符),我也嘗試過用正則表達式來分割每個鍵和值,但是我失去了層次結構(深度)數據...問題的
限制條件:
- 數據結構可以接受一個以上的深度
- 特殊字符(或字符集)可以被改變(不同於__或{})
任何人都知道一個好的算法? 我不確定,但JSon格式有相同的約束,我錯了嗎? 許多謝謝@ll
最簡單的就是使用遞歸。甚至不要考慮正則表達式。 – 2014-02-08 17:30:08
好的,但你如何解析'價值'來取得整個價值,而不僅僅是一個子價值?例如:{k = v__k = {k = v__k = v__k = {k = v}} __ k = {k = v} __ k = v} 您需要計算集合的開始和結束嗎?我會嘗試 – PacDroid
你通常通過創建一個合適的數據結構來解析這種東西。例如,鍵值對的動態數組(類似於'struct dict {char ** keys; union {char * str; struct dict * dict;} * values;}'然後您可以創建解析器這個數據結構的樹(稱爲AST,用於「抽象語法樹」) – 2014-02-08 17:50:32