整数と特殊文字「#」を含む入力ストリームがあります。... 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() を呼び出すと、大きなオーバーヘッドが発生します。
個々のトークンをそのタイプで解析する方法はありますか? つまり、整数の場合は整数として解析し、'#' の場合はスキップします。ありがとう!