C++ 分段parse stream的簡單方法: getline, istream_constructor + copy
c++的getline函數是非常好用的parse工具,用在固定格式上的parse非常方便。
getline的格式如下:
istream& getline(istream& is, string& str, char delim);
一開始parse出來會是(0,82 (0,14...都少了個右括弧,
所以我們在迴圈中補上。輸出結果如下:
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...)