我一直试图将文本文件的行存储在C++中的列表中。更好的是,我一直试图将文本文件的每一行的每个单词存储在一个字符串列表中的字符串中,但是看来我这样做的方式是错误的。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <list>

using namespace std;

int main()
{
  FILE *f= fopen("teste.txt", "r");
  size_t len= 100; // valor arbitrário
  char *line= (char*)malloc(len);
  std::list<string> mylist;


if (!f)
  {
    perror("teste.txt");
    exit(1);
  }
  while (getline(&line, &len, f) > 0)
  {    //THE REAL PROBLEM
  for (std::list<string>::iterator it = mylist.begin(); it != mylist.end(); it++){
    *it=line;
    cout << *it << '\n';
}
  }
  if (line)
    free(line);
  fclose(f);
  return 0;
}

确切的问题是,这不会产生任何结果。它可以编译,但是没有任何结果。

提前致谢。

最佳答案

如下更改您的while循环:

  while (getline(&line, &len, f) > 0)
  {
      mylist.push_back(line);
      cout << mylist.back() << '\n';
  }

您无法通过std::list<>访问任何未初始化的项目。

另外注意,您应该将line设为std::string,并从您的代码中省略malloc() / free()调用。

第二个注意:对于输入文件流,请使用std::ifstream而不是FILE*

这是完全固定(ideone上没有更多错误/异常)的代码示例:
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <exception>
#include <errno.h>
#include <stdlib.h>

int main()
{
  try
  {
    std::ifstream f("teste.txt");

    if(!f)
    {
        std::cerr << "ERROR: Cannot open 'teste.txt'!" << std::endl;
        exit(1);
    }
    std::string line;
    std::list<std::string> mylist;

    while (std::getline(f,line))
    {
        mylist.push_back(line);
        std::cout << mylist.back() << std::endl;
    }
  }
  catch(const std::exception& ex)
  {
    std::cerr << "Exception: '" << ex.what() << "'!" << std::endl;
    exit(1);
  }

  exit(0);
}

关于c++ - 将文本文件中的行存储在字符串列表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22053771/

10-10 17:31
查看更多