我有一个包含整数和特殊含义字符'#'的输入流。它看起来如下: ... 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