我正在解析一个文本文件,一次读一行。对于每一行,我需要检查前n个字母是否与特定单词匹配,然后处理该行。
目前已完成如下:
while (!inFile.eof())
{
std::string line;
std::getline(inFile, line);
if (compareCaseInsensitive(line, "facet", 5))
{
std::stringstream lineStream(line);
float a,b,c;
std::string filler;
lineStream >> filler >> filler >> a >> b >> c;
}
}
我正在将字符读入字符串,然后将这些字符复制到字符串流中,然后将这些字符读入特定变量。这看起来非常低效。反正有没有直接读入stringstream?或者从字符串中提取标记以防止不必要的复制?
答案 0 :(得分:2)
sscanf可能就是你要找的东西:
char filler[64];
float a,b,c;
sscanf(line.c_str(), "%s %s %f %f %f", filler, filler, &a, &b, &c);
但是你必须修复格式字符串以处理你实际使用的任何分隔符,我只是为了具体而猜测这里(空格)。 C format specifiers给出了很多(尽管不是无限制的)余地,用于解释输入字符串格式化方式的不确定性。