我有一个包含整数和特殊含义字符“#”的输入流。它看起来如下:
... 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() 会带来很大的开销。
有没有办法可以按类型解析单个令牌?即,对于整数,将其解析为整数,而对于'#',跳过它。谢谢!