我有一个包含整数和特殊含义字符'#‘的输入流。看起来是这样的:... 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()会带来很大的开销。
有没有一种方法可以根据令牌的类型来解析单个令牌?也就是说,对于整数,将其解析为整数,而对于'#',则跳过它。谢谢!
发布于 2012-10-07 03:08:47
就我个人而言,如果您的分隔符始终是空格,而不管后面是什么,我建议您只将输入作为字符串并从那里进行解析。这样,你就可以获取字符串,看看它是数字还是#之类的东西。
https://stackoverflow.com/questions/12762865
复制相似问题