2

我正在解析一个文本文件,一次读取一行。对于每一行,我需要检查前 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;  
    }
}

我将字符读入字符串,然后将这些字符复制到字符串流中,然后将这些字符读入特定变量。这似乎非常低效。反正有没有直接读入字符串流?或从字符串中提取标记以防止不必要的复制?

4

1 回答 1

2

sscanf可能是您正在寻找的:

char filler[64];
float a,b,c;
sscanf(line.c_str(), "%s %s %f %f %f", filler, filler, &a, &b, &c);

但是,您必须修复格式字符串以处理您实际使用的任何分隔符,为了具体起见,我只是在这里猜测(空格)。 C 格式说明符为您提供了很多(尽管不是无限的)余地来解释输入字符串格式的不确定性。

于 2013-05-31T18:44:43.207 回答