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...)

這個網誌中的熱門文章

大彎國家公園: 四日行程 Four Days in Marfa & Big Bend