如何找出写入二进制文件的字符串数?

时间:2016-02-03 13:09:35

标签: c++ arrays fstream binaryfiles

我有一个二进制文件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;

2 个答案:

答案 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
}