c++ - 有效地从文件的各个行中读取 token

标签 c++ string input ifstream

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

我将字符读入字符串中,然后将这些字符复制到字符串流中,然后将这些字符读入特定变量中。这看起来效率很低。有没有办法直接读入字符串流?或者从字符串中提取标记以防止不必要的复制?

最佳答案

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为您提供了很大的(尽管不是无限的)回旋余地来解决输入字符串格式的不确定性。

关于c++ - 有效地从文件的各个行中读取 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863734/

相关文章:

c++ - 我需要修改用于对角线边缘检测的 Sobel 内核。 OpenCV 和 C++

c# - 使用 C++/CLI 将图片插入 Excel 并收到 100x 警告 C4691

c++ - 错误 C2664 : 'bool Strless::operator ()(const TCHAR *&,const TCHAR *&) const' : cannot convert parameter 1 from 'wchar_t *const ' to 'const TCHAR *&'

java正则表达式删除csv中不需要的双引号

c++ - 我如何指定必须静态链接库 X?

java - 字符串文字中的正则表达式

包含不同但相似字符串的对象的 Java hashcode() 冲突

javascript - ember.js 中自定义输入字段的最佳实践

jQuery动态图片加载

c - 使用 scanf 的选择性输入。可能只读取 ascii 0x79 和 0x6e