發表文章

目前顯示的是 10月, 2013的文章

C++ 分段parse stream的簡單方法: getline, istream_constructor + copy

c++的getline函數是非常好用的parse工具,用在固定格式上的parse非常方便。 getline的格式如下: istream& getline(istream& is, string& str, char delim); istream& is         輸入的istream/fstream string&    str       擷取下來的字串要儲存的地方(開個變數存即可) char        delim   分段字元。 我們直接舉例子說明使用方法,假設今天有個文件長得像這樣:   (0,82)(0,-14)(0,-1)(0,-6)(0,-4)   我們想要個別parse每個括弧存成字串,這時可以用下面的程式碼: string buffer; while (getline(fin, buffer, ')')) {     buffer = buffer + ")"; } cout << buffer << " "; 一開始parse出來會是 (0,82 (0,14...都少了個右括弧, 所以我們在迴圈中補上。輸出結果如下: (0,82) (0,-14) (0,-1) (0,-6) (0,-4) C++11 Parsing的好幫手: istream_constructor + copy const char * cStr; std::stringstream ss(cStr); std::copy(std::istream_iterator (ss),     std::istream_iterator (),     std::back_inserter(vector)); Can split a simple format string into a vector.(ex: abc bcd cde... or abc\nbcd\ncde\n...)