【问题标题】:Creating a File Parser in C++在 C++ 中创建文件解析器
【发布时间】:2013-10-03 21:17:32
【问题描述】:

我正在尝试创建一个解析器类,它将基于“”解析文件并将单词放入链表中。

class FileReader
{
public:
   FileReader(char* file)   
   {

    ifstream fout (file, ifstream::in);

    string hold;

    while (fout.good())
    {
        getline (fout, hold, " ");
        cout << hold;

    }

    fout.close();

    }

};

函数getline(fout, hold, " ") 没有将“”识别为分隔符。

我还没有编写链表部分,所以这只是程序的解析部分。

还有更好的方法来创建解析器吗?

【问题讨论】:

标签: c++ parsing fileparsing


【解决方案1】:

它应该像这样工作:

#include <fstream>
#include <iterator>
#include <list>
#include <string>

std::ifstream infile(file);

std::list<std::string> words(std::istream_iterator<std::string>(infile),
                             std::istream_iterator<std::string>());

现在words 是您的空格分隔标记的链接列表。

课程:最好的代码是您不必编写的代码。

【讨论】:

  • @user814628:你已经准备好使用std::getline,所以……差别不大。
  • @user814628 当执行相同任务的代码已经编写并经过良好测试时,重写代码没有任何意义。
  • 很容易忽略标准库中的一些漂亮特性... ;)
  • @KerrekSB 从 OP 的代码来看,他似乎还没有达到能够理解这些代码行到底在做什么的水平。我刚刚发布了一个简单的解决方案,我相信他现在可以更轻松地掌握它。但是,我确实没有提到您提供的更好的解决方案。谢谢。
【解决方案2】:

getline 中的最后一个参数是 char 而不是 string。查看您当前的代码,您需要getline(fout,hold,' ') 或只需要getline(fout,hold) -- *如果您想要整行。

*:编辑

【讨论】:

  • getline(fout, hold) 将得到一整行......而不仅仅是单个单词。
猜你喜欢
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2017-05-10
  • 2011-10-17
  • 1970-01-01
  • 2021-11-26
  • 2010-10-30
相关资源
最近更新 更多