剛做了華為筆試題,有個ini檔案解析的題,寫了三遍終於過了,記錄一下經驗和收穫。
題意:ini檔案由節、鍵、值組成。
[section]
(鍵=值)
name=value
註解使用分號表示(;)。在分號後面的文字,直到該行結尾都全部為註解。
; comment textini檔案的資料格式的例子(配置檔案的內容) [section1 name]
keyname1=value1
keyname2=value2
...[section2 name]
keyname21=value21
keyname22=value22
其中:[section1 name]用來表示乙個段落。
題解:這個題目不難,就是坑點有點多,下面有列舉。思路就是用乙個結構體存一條記錄的資訊,然後過載小於號就可以實現排序。解析的過程是將整行讀入,然後在進行處理,一開始是用乙個字元乙個字元讀入的處理的,但是只過了50%,後來乾脆暴力一點把可能有坑的地方都考慮上,就一遍過了。
坑點:1. 存在注釋用『;』表示分號之後的整行都是注釋要忽略掉,這個分號可能出現在某行首位,也能出現在行中,但是不會出現在某個名稱之間和key,value對之間(還算講理了)
2. 空格問題,到處都存在空格(行首,行末,行中,等號兩側,名稱中間也有可能),名稱內部的空格要留下,首位的空格要去掉(這就是為什麼換成整行讀和處理的原因了),所以每次拿到一行對首尾去掉空格,然後解析完之後再對行首尾去空格,基本就沒問題了。
3.存在空行,可能存在乙個整行都是空的
大概就是以上幾點了。
**:
#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn = 1e4+5;
const int mod = 1e9+7;
const int inf = 1<<30;
struct node
bool operator<(const node& n) const
}in[maxn];
void trim(string& s)
int main( )
trim(presection);
presection = "";
}else
i++;
for(; itrim(curkey);
curkey = "";
trim(curvalue);
curvalue = "";
in[num++] = node(presection, curkey, curvalue);}}
sort(in, in+num);
for(int i=0; icout
}
python解析ini檔案
python解析ini檔案 使用configparser configuration file parser sections add section section has section section 操作section options section has option section,o...
ini檔案解析c庫 iniparser
github 一.交叉編譯ini解析庫 1.官方 2.解壓 cpp view plain copy tar zxvf iniparser 3.1.tar.gz cd tar zxvf iniparser 3.修改makefile cpp view plain copy cc gcc 修改為 cc a...
ini檔案解析c庫 iniparser
一.交叉編譯ini解析庫 1.官方 2.解壓 tar zxvf iniparser 3.1.tar.gz cd tar zxvf iniparser 3.修改makefile cc gcc 修改為 cc arm none linux gnueabi gcc ar ar 修改為 ar arm none...