我有一个二进制文件text.bin
。里面的文字是这样写的:
4helo5hello6helloo
。如果我不知道里面有3根弦,
我怎么知道的?我想从a创建一个动态的字符串数组
二进制文件,但首先我必须知道文件中有多少字符串。
我知道我可以这样读:
ifstream dat("text.bin", ios_base::binary);
if (!dat)
{
cout << "Error";
return 1;
}
int temporary;
dat.read((char*)(&temporary), sizeof(temporary));
char *arrray = new char[temporary];
dat.read(arrray, temporary);
string word = string(arrray, temporary);
如何将其转换为循环,只要在二进制文件中有读取内容,它就会读取?我如何找出有多少单词,以便我可以为单词准备动态数组?我正在使用:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
答案 0 :(得分:1)
保持简单。如果二进制格式如你所说:4helo5hello6helloo,请执行以下操作;
阅读第一个号码
子串从第一个数字的位置到字符串的长度(你读的数字),
将子字符串放入二维数组(字符串数量的一个维度,字符串长度的另一个维度),
重复冲洗,直至到达文件末尾。
数组的第一个维度的长度是文件中的字符串数。该数组现在包含读取文件中的所有字符串。
干杯!
答案 1 :(得分:0)
对于4helo5hello6helloo
,编写一个单独的函数来迭代word
并在每个数值处将String数组索引增加该值,并将word_counter variable
递增1以获得你文件中的文字。
跳过的索引包含您的单词(可能将它们写入另一个数组)。
read ()
函数具有返回类型size_t
并返回从文件读取的字节数,其中返回值0
表示已到达文件末尾< / strong>即可。
int not_end = 1;
while (not_end)
{
not_end = dat.read((char*)(&temporary), sizeof(temporary));
char *arrray = new char[temporary];
dat.read(arrray, temporary);
string word = string(arrray, temporary);
// Note that word will get overwritten each time the loop is run
// Store word in an array of Strings and keep incrementing index
}