将文本文件中的行存储在字符串列表中

时间:2014-02-26 21:29:59

标签: c++ string list file text

这是原始问题。     #包括     #包括     #包括     #包括     #包括     #include

using namespace std;

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


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

非常感谢修复版。

尊重,

UAGA

2 个答案:

答案 0 :(得分:1)

您无法使用'='运算符为char*分配std::string值。

更改

*it=line

it->assign(line,line+strlen(line);

答案 1 :(得分:1)

按如下方式更改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);
}