写入文件和二进制搜索

时间:2018-04-16 19:08:41

标签: c++ file binary-search

我有一个文件,其中包含有关图书的数据(图书ID,作者ID,图书标题和图书价格),然后我们可以说是否要删除我通过ID搜索的图书记录然后将其删除。 / p>

这是我在文件上输入的方式

int writebook(fstream& stream, book_attributes& BOOKS)
{
    stream.seekp(0, ios::end);
    char buffer[maxBuffersize];
    strcat(buffer, BOOKS.book_id);
    strcat(buffer, BOOKS.author_id);
    strcat(buffer, BOOKS.book_title);
    ostringstream ss;
    ss << BOOKS.book_price;
    string s(ss.str());
    const char *cstr = s.c_str();
    strcat(buffer, cstr);
    short length = strlen(buffer);
    stream.write(buffer, length);
    stream.seekg(0);
    return length;
}

问题是当数据写在文件上时,ID之前有三个字节导致搜索无法正常工作,我真的不明白为什么它的三个字节我最好猜测前两个是大小的记录以2位表示,因为它的类型为short。有什么建议?谢谢。

编辑

这是我搜索的方式,以防您提出

bool BinaryBookSearch(fstream & file, book_attributes &rec, char* key)
{
    int low = 0, high = getFileLength(file) / sizeof(rec) - 1;
    int guess;
    while (low <= high)
    {
    guess = (high + low) / 2;
    readBookRecord(file, rec, guess);
    if (Equal(rec.book_id, key))
        return true;
    if (Greater(rec.book_id, key))
        high = guess - 1;
    else
        low = guess + 1;
    }
    return false;
}

0 个答案:

没有答案