我的问题怎么样,正如标题中提到的那样,我知道如何在 C++ 中制作简单和双链表,但我不知道如何将信息从文本文件传递到简单列表。我有一个用 C++ 构建的程序,带有文件索引,我的程序完成了所有这些工作:
- 添加
- 以显示
- 搜索
- 消除
- 调整
- 显示索引
但我缺少的唯一选择是Display Orderly。为此,他们要求我使用 TDA,我必须从文本文件中获取数据并将其添加到 TDA 以便稍后对其进行排序和显示。我的项目处理 2 个文本文件,因为它用于索引,一个是Datos.txt(保存所有信息),另一个是Indice.txt(保存索引)。
添加时请求的数据如下:
cout << "Codigo: ";
cin.getline(Dis.codigo,10);
cout << "Nombre: ";
cin.getline(Dis.nombre,30);
cout << "Cantante: ";
cin.getline(Dis.cantante,30);
cout << "Genero: ";
cin.getline(Dis.genero,20);
cout << "Precio: ";
fflush(stdin);
cin.getline(Dis.precio,10);
cout << "Discografia: ";
cin.getline(Dis.discografia,20);
cout << "Disco agregado correctamente" << endl;
system("pause");
ofstream a("datos.txt",ios::app);
ofstream b("indice.txt",ios::app);
a.write((char*)&Dis,sizeof(Dis));
a.seekp(0,ios::end);
Ind.pos=a.tellp()/sizeof(Dis);
strcpy(Ind.codigo,codigo);
b.write((char*)&Ind,sizeof(Ind));
b.close();
a.close();
此数据保存在Data.txt文件中,代码与位置一起保存在Index.txt中。我希望我的问题陈述让我明白,这只是如何将.txt中的数据添加到一个简单的链表中并有序显示。
我试图了解情况。
任务:将两个文本文件转储到磁盘列表中。
➢ 创建 TDA 或 TAD(抽象数据类型)
首先是以
Dis
这种方式创建结构(磁盘)。注意:这种类型的结构不能出现在文本文件中,因为 a
string
是指向字符串的指针,它具有动态大小。也就是说,根据架构,所有整数都占用 32 位或 64 位,它始终是相同的数字,但字符串 ,"Pedro"
与"Juan"
前 4 和后 5 不同,尽管如此,两者都是类型字符串,那么你不能这样做sizeof
。➢ 管理文件
对于文件处理,需要标准库
stdio
,它main
应该是这样的。有时需要他stdlib
,所以我们离开它,而不注意它的用途。为此,有必要知道如何在C中处理文件,尽管它也适用于C++,因为它是一种累积语言。所以我找到了处理该主题的以下链接:
C 编程 - 文件处理 - WikiBooks。
FILE
。伪代码:
➢ 打开一个文件
fopen函数的opentype参数列表是:
在我们的例子中,我们将使用Non-Binary Read,也就是说
"r"
,因为我们正在处理文件txt
(纯文本)而不是图像或音频。代码:这些是同一行的第 1 步和第 2 步。
➢ 读取文件
在我们的例子中,我们对 感兴趣
fgetc
,因为该结构Dis
不能出现在文件中。代码:这使它一次读取一个字符。
➢ 关闭文件
代码:
我们已经看到了关于文件操作的基本操作。现在我们要考虑如何将其转储到数据结构
Dis
中。由于您没有显示数据如何来自磁盘的示例文本文件,我将假设它具有以下格式。而且,我认为这样就不需要读取索引文件,所以我不会触及那个话题。
为此,必须考虑两个例外,除空格以外的任何字符(即
' '
,'\x20'
)或换行符 ('\n
,\r
,\x0D
,\x0A
)。空格表示结构中的下一个字段,换行符,下一个磁盘。➢ 如何读取这种新格式的文件?
代码:我们采用前面关于读取字符的代码并添加内容。
注意:我留下了一些未完成的事情,以便您可以安心练习,它们也没有那么难。
➢ 结构的组织
在以下示例中,我将按代码订购磁盘。应该澄清的是,最有效的排序方法是允许二分查找的排序方法,与另一种相比,这种排序方法效率较高且速度较慢。
笔记:再一次,我会用这些小细节来挑战你。