gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:43:45 24 4
gpt4 key购买 nike

我一直在尝试将文本文件的行存储在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com