.txt文件到C++中的结构数组
.txt file to an array of structures in C++?
我以前用过C++,但我可以肯定地说我不是专业人士。甚至不是真正的编码一般。我正在尝试,尽管它可能看起来不像。:/
我的任务是创建一个类型为"book_list"的结构数组。
结构如下所示:
struct book_list
{
int bookNumber; string bookTitle; string bookAuthor;
string bookDescription; int bookMonth; int bookYear; int bookRating;
};
创建数组本身非常简单:
book_list myBookList[50];
这是我遇到麻烦的地方:
该程序旨在搜索.txt文件。如果找到它,它将在结构数组中读取文件中包含的所有数据。因此,书号与.txt文件的书号等。
我整天都在寻找潜在的解决方案,并且研究了ifstream,getline,使用迭代器等想法。我的研究就像我的大脑一样分散,我觉得我有点难倒了。
请帮忙,如果您需要任何进一步的信息,请告诉我!
谢谢
-乔恩
您需要单独读取/解析每个条目,或者读取整个文件然后解析它。由于您无论如何都将所有结构存储在内存中,因此如果您不想一次阅读一个结构,后者可能没问题,但出于教育目的,您可能希望尝试一次阅读一个。也许用线隔开?
然后,您需要一种方法来解析条目。没有一种方法可以做到这一点,但最简单的方法可能是使用 JSON 格式的文本文件,主要是因为有可以使用它的库和可以帮助可视化它的工具。JSON 允许您表示字典、数组、字符串、数字和布尔值。您可以毫不费力地手动执行此操作,因为您没有像嵌套结构这样花哨的东西,或者您可以使用这样的库来为您解析 JSON:https://github.com/DaveGamble/cJSON(这是在 C 中,如果要使用 C++,则必须与C++链接)
假设问题可以表述为:
你能给我一个小小的编程示例来启动我的练习吗:
程序 P:
#include <iostream>
using namespace std;
int main() {
int num;
string buf;
while (true) {
cin >> num; if (cin.eof()) break;
cin >> buf; if (cin.eof()) break;
cout << "num is: " << num << " buf is: " << buf << endl;
}
}
文本文件 T.txt
1
one
2
two
你可以运行
P
并看到输出是您可能期望的。
现在当然,将 cin>> num; 更改为 cin>>书单[0].bookNumber; 等等,您的锻炼将走上正轨。
使用 <stdio.h>
表示FILE
。
char *name;
FILE *file;
name = "database.txt";
file = fopen(name,"w+");
book_list myBookList[50];
写作时使用它。
book_list newRecord;
newRecord.bookNumber = 0;
//other assignments
fseek(file,0,SEEK_END);
fwrite(&newRecord,sizeof(book_list),1,file);
fclose(file);
阅读时使用下面。
file = fopen(name,"r+");
book_list record;
fseek(file,0,SEEK_SET);
int i=0;
while(true){
fread(&record,sizeof(book_list),1,file);
if(feof(file))
break;
myBookList[i].bookNumber = record.bookNumber;
//other assignments
i++;
}
fclose(file);
注意:我不确定这是否适用于字符串类。我已经在char[SIZE]
和strcpy
中使用它.我的建议是首先尝试使用内置类型(如int, float, char
等)。
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组