将2个结构数组中的信息输出到一个文件中
Output info from 2 struct arrays into one file
如果这没有意义,我深表歉意。我不知道该用谷歌搜索什么。
假设我有两个阵列
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…
这里可以使用转义符(Look it up(的概念,但更好的方法是在文件开头存储存储的字符串数。考虑一个看起来像的输出文件
4
string a1_1
string a1_2
string a1_3
string a1_4
2
string a2_1
string a2_2
读取cont,四个,然后读取计数字符串,然后读取下一个计数,然后读取更多计数字符串
好吧,所以你认为他很差劲。我不能只在a1中插入一个新字符串而不更改文件前面的数字。
好吧,祝你好运,在不完全弄乱文件的情况下,将数据插入文件中间。这是可以做到的,但只有在将插入后的所有内容都移动插入的大小之后,这并不像听起来那么微不足道。在编程生涯中,这是你被分配的任务,你必须寻求帮助,你注定要把文件读入内存,插入新值,然后再把文件写出来,所以就这样吧。
那么这在代码中是什么样子的呢?首先,我们放弃数组,转而使用std::vector
。矢量是聪明的。它们长得很合身。他们知道里面有多少东西。他们照顾好自己,所以没有不必要的new
和delete
废话。你不使用它们一定很愚蠢。
读数:
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
循环不那么方便。
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件