gpt4 book ai didi

c++ - 从以分号分隔的文件中读取并存储到数组中

转载 作者:行者123 更新时间:2023-11-28 06:25:24 25 4
gpt4 key购买 nike

我完全迷失了,已经尝试了几个小时来读取名为“movies.txt”的文件并将其中的信息存储到数组中,因为它有分号。有什么帮助吗?谢谢。

电影.txt:

The Avengers     ; 2012     ;  89    ;   623357910.79
Guardians of the Galaxy ; 2014 ; 96 ; 333130696.46

代码:

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

struct Movie {
std::string name;
int year;
int rating;
double earnings;
};

int main()
{
const int MAX_SIZE = 100;
Movie movieList[MAX_SIZE];
std::string line;
int i = 0;

std::ifstream movieFile;
movieFile.open("movies.txt");

while (getline(movieFile, line, ';'))
{
movieFile >> movieList[i].name >> movieList[i].year >> movieList[i].rating >> movieList[i].earnings;
i++;
}

movieFile.close();

std::cout << movieList[0].name << " " << movieList[0].year << " " << movieList[0].rating << " " << movieList[0].earnings << std::endl;
std::cout << movieList[1].name << " " << movieList[1].year << " " << movieList[1].rating << " " << movieList[1].earnings << std::endl;

return 0;
}

我想要的是:

movieList[0].name = "The Avengers";
movieList[0].year = 2012;
movieList[0].rating = 89;
movieList[0].earnings = 623357910.79;

movieList[1].name = "Guardians of the Galaxy";
movieList[1].year = 2014;
movieList[1].rating = 96;
movieList[1].earnings = 333130696.46;

最佳答案

我修改了你的代码。

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>

struct Movie {
std::string name;
int year;
int rating;
double earnings;
};


std::vector<std::string>
split(const std::string &s, char delim = ',')
{

std::vector<std::string> elems;

std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim))
{
elems.push_back(item);
}
return elems;
}


int main()
{

std::vector<Movie> movieList;
std::string line;


std::ifstream movieFile;
movieFile.open("movies.txt");

while (getline(movieFile, line))
{
std::vector<std::string> columns = split(line,';');
Movie movie;

movie.name = columns[0];
movie.year = std::stoi(columns[1]);
movie.rating = std::stoi(columns[2]);
movie.earnings = std::stof(columns[3]);

movieList.push_back(movie);
}

movieFile.close();

for (const Movie & m: movieList)
{
std::cout << m.name << " " << m.year << " " << m.rating << " " << m.earnings << std::endl;
}


return 0;
}

基本上,我添加了一个拆分函数,使用“;”拆分行。我还使用 vector 来存储电影而不是硬编码的电影数组。这样更好。

附言没有 vector 的第二个版本

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>

struct Movie {
std::string name;
int year;
int rating;
double earnings;
};



void split(const std::string &s, char delim, std::string elems[])
{
std::stringstream ss(s);
std::string item;

int i = 0;

while (std::getline(ss, item, delim))
{
elems[i++] = item;
}
}


int main()
{

//std::vector<Movie> movieList;

const int MAX_SIZE = 100;
Movie movieList[MAX_SIZE];
int movieNo = 0;

std::string line;


std::ifstream movieFile;
movieFile.open("/home/marcin/testing/movies.txt");

std::string columns[4];

while (getline(movieFile, line))
{
split(line,';', columns);

movieList[movieNo].name = columns[0];
movieList[movieNo].year = std::stoi(columns[1]);
movieList[movieNo].rating = std::stoi(columns[2]);
movieList[movieNo].earnings = std::stof(columns[3]);

++movieNo;

}

movieFile.close();

for (int i =0; i < movieNo; ++i) {
std::cout << movieList[i].name
<< " "
<< movieList[i].year
<< " "
<< movieList[i].rating
<< " "
<< movieList[i].earnings
<< std::endl;
}


return 0;
}

关于c++ - 从以分号分隔的文件中读取并存储到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620478/

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