gpt4 book ai didi

c++ - 将 2 个结构数组的信息输出到一个文件中

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

如果这没有意义,我深表歉意。我不确定要用谷歌搜索什么。

假设我有两个数组

string a_1[16];
string a_2[20];

我需要用一个函数将它们输出到一个文件中,首先是 a_1[0] 到 a_1[n]。然后读入 a_2。

也可以再次运行该函数以将更多 a_1 和 a_2 添加到输出文件中。

因此格式将是:

//output_file.txt

a_1[0].....a_1[n]
a_2[0].....a_2[M]
a_1[n+1]...a_1[16]
a_2[M+1]...a_2[20]

我的问题是。有没有办法读回 output_file.txt,以便它按顺序读入所有 a_1,a_1[0] 到 a_1[16]。然后输入a_2[0]到a_2[20]。

也许只是在每个组之间放置“某物”,以便在读取“某物”时,它知道停止读取 a_1 并切换到读取 a_2....

最佳答案

OP 所说的“某物”通常称为 Sentinel 或 Canary 值。要用作哨兵,您必须找到数据流中不存在的模式。这很难,因为几乎任何东西都可以放在字符串中。如果你使用,比如说,“XxXxXx”作为你的标记,那么你必须非常小心它永远不会写入文件。

此处可以使用转义字符(查找)的概念,但更好的方法是在文件开头存储一定数量的已存储字符串。考虑一个看起来像的输出文件

4
string a1_1
string a1_2
string a1_3
string a1_4
2
string a2_1
string a2_2

读取cont,four,然后读取count个字符串,然后读取下一个count,然后读取count个更多的字符串

好吧,所以你认为他很烂。我不能只在 a1 中插入一个新字符串而不更改文件前面的数字。

好吧,祝你好运,将数据插入文件中间而不会完全破坏文件。可以做到,但前提是将插入后的所有内容都移动到插入的大小,这并不像听起来那么微不足道。在编程生涯中,当分配给你这样的任务时,你必须寻求帮助,你几乎注定要将文件读入内存,插入新值,然后写回文件又出去了,所以就去吧。

那么这在代码中是什么样子的呢?首先,我们放弃数组,转而使用 std::vector。 vector 很聪明。他们成长为适合。他们知道里面有多少东西。他们照顾自己,所以没有不必要的 newdelete 废话。你一定是愚蠢的不使用它们。

阅读:

std::ifstream infile(file name);
std::vector<std::string> input;
int count;
if (infile >> count)
{
infile.ignore(); // discard end of line
std::string line;
while (input.size() < count && getline(infile, line))
{
input.push_back(line);
}
if (input.size() != count)
{
//handle bad file
}
}
else
{
// handle bad file
}

和写作

std::ofstream outfile(file name);
if(outfile << output.size())
{
for (std::string & out: output)
{
if (!outfile << out << '\n')
{
// handle write error
}
}
}
else
{
// handle write error
}

但这看起来像是家庭作业,所以 OP 可能不允许使用。在那种情况下,逻辑是相同的,但你必须

std::unique_ptr<std::string[]> inarray(new std::string[count]);

std::string * inarray = new std::string[count];

为您正在读取的字符串分配存储空间。第二个看起来比第一个少工作。外表是骗人的。第一个为你照顾你的内存。第二个要求您的代码中至少有一个 delete[] 以正确的速度删除内存。错过它就会发生内存泄漏。

您还需要有一个变量来跟踪数组的大小,因为指针不知道它们指向的对象有多大。这使得编写 for 循环不太方便。

关于c++ - 将 2 个结构数组的信息输出到一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35882612/

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