我有一個包含整數和特殊含義字符'#'的輸入流。它看起來如下: ... 12 18 16 # 22 24 26 15 # 17 # 32 35 33 ...
令牌由空格分隔。 '#'的位置沒有模式。根據類型標記字符串流
我試圖來標記輸入流是這樣的:
int value;
std::ifstream input("data");
if (input.good()) {
string line;
while(getline(data, line) != EOF) {
if (!line.empty()) {
sstream ss(line);
while (ss >> value) {
//process value ...
}
}
}
}
這段代碼的問題是,處理遇到的第一個「#」時停止。
我能想到的唯一解決方案是將每個單獨的標記提取爲一個字符串(不是'#')並使用atoi()函數將字符串轉換爲整數。但是,由於大多數令牌都是整數,所以效率很低。在令牌上調用atoi()會帶來很大的開銷。
有沒有一種方法可以根據其類型解析個人令牌?即整數,解析爲整數,而'#',跳過它。謝謝!
使用函數getline兩次acccepable?如果是這樣,使用'getline(data,line,'#');'fisrt。 – andre
@ahenderson我沒有明白你的觀點。 getline的一個函數簽名是:istream&getline(istream&is,string&str,char delim);通過將'#'作爲第三個參數傳遞給getline,getline()將以'#'作爲分隔符。 – itnovice
我發佈了一個答案。 – andre