gpt4 book ai didi

c++ - 遍历 txt 文件中的对象数组

转载 作者:行者123 更新时间:2023-11-30 05:13:15 24 4
gpt4 key购买 nike

我有一个用逗号分隔记录的文件:

城市.txt:

1,NYC
2,ABQ
...

我想遍历每一行:ID 和名称。我已经创建了代码:

#include <iostream>
#include <string>
using namespace std;

class City {
int id;
string name;

public:
City() {}
City(int id, int name)
{
this->id = id;
this->name = name;
}

void load_file()
{
ifstream v_file("cities.txt");
if (v_file.is_open()) {
while (!v_file.eof()) {
//...
}
}
v_file.close();
}
}

int main()
{
City array_city[1000];

array_city.load_file();

return 0;
}

你能告诉我如何将所有行加载到数组 array_city 并对其进行迭代吗?我不知道在 load_file 方法的 while block 中放置什么。我不知道天气,load_file 方法应该有 void 类型。不幸的是,我必须在数组上执行此操作。

最佳答案

在 while 循环中使用 EOF 不是一个好主意。在 Why is iostream::eof inside a loop condition considered wrong? 中阅读更多内容


, vector 应该优先于数组。但是,您的老师知道更多建议在这里使用数组。出于这个原因,我提供了一个数组解决方案:

  1. 逐行读取文件
  2. 提取id和字符串
  3. 将其赋给数组的第i个单元格

代码:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class City {
int id;
string name;

public:
City() {}
City(int id, string name) : id(id), name(name)
{
}
void print()
{
cout << "ID = " << id << ", name = " << name << endl;
}
};

void load_file(City* cities, const int n)
{
ifstream v_file("cities.txt");
if (v_file.is_open()) {
int number, i = 0;
string str;
char c;
while (v_file >> number >> c >> str && c == ',' && i < n)
{
//cout << number << " " << str << endl;
cities[i++] = {number, str};
}
}
v_file.close();
}

int main()
{
City cities[4]; // assuming there are 4 cities in the file
load_file(cities, 4);
for(unsigned int i = 0; i < 4; ++i)
cities[i].print();

return 0;
}

std::vector 相同的解决方案, 如果你感兴趣。 =) 如果您还没有学过它们,我建议您跳过那部分,稍后在类(class)中这样做时再回来。

使用City vector 。 Read the file line by line ,并通过构建类的实例将您阅读的每一行推回到 vector 中,您就完成了!

例子:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;

class City {
int id;
string name;

public:
City() {}
City(int id, string name) : id(id), name(name)
{
}
void print()
{
cout << "ID = " << id << ", name = " << name << endl;
}
};

void load_file(vector<City>& cities)
{
ifstream v_file("cities.txt");
if (v_file.is_open()) {
int number;
string str;
char c;
while (v_file >> number >> c >> str && c == ',' && i < n)
{
//cout << number << " " << str << endl;
cities.push_back({number, str});
}
}
v_file.close();
}

int main()
{
vector<City> cities;
load_file(cities);
for(unsigned int i = 0; i < cities.size(); ++i)
cities[i].print();

return 0;
}

输入:

Georgioss-MacBook-Pro:~ gsamaras$ cat cities.txt 
1,NYC
2,ABQ
3,CCC
4,DDD

输出:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++0x main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
ID = 1, name = NYC
ID = 2, name = ABQ
ID = 3, name = CCC
ID = 4, name = DDD

关于c++ - 遍历 txt 文件中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44042934/

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