c++ - 二进制搜索到达文件中间的方法

标签 c++ search pointers binary variable-assignment

我正在做一个作业,我得到了一个程序,该程序读取数据文件并将数据吐出到字节数组中,其中数组的前 4 个字节告诉你它有多少人的名字(数据文件包含)。接下来是包含人名字符串的数组的其余部分。此数组由 const void * foo;

指向

例如,前 4 个字节表示数组中存储了 5 个姓名,接下来的 4 个字节表示该人姓名的地址。人名存放在数组中

int num = ((int*)foo)[0];
const int ppl1 = ((int*)foo)[1];
string name = ((char*)foo)+ppl1;

所以 num 会告诉你数组中有 5 个名字,ppl1 会告诉你数组的位置,你可以在其中找到名字,name 收集名字位于阵列的那个位置的人。

差不多吧,给我一个名字在数组中搜索,我想用二分查找来做。我不知道找到文件中间的方法,你们能给我一些指示吗?

欢呼=]

编辑:所以我创建了这个,但它会出现错误并且只适用于一种情况(搜索第一个条目时)。不知道为什么...

    int first = 0;
    int num = ((int*)foo)[0];
    int last = num;


    while (first <= last) {
        int middle = first+last/2;
        int offset = ((int*)foo)[middle];
        string name = ((char*)foo)+offset;
        if (person < name) {
            last = middle-1;
        } else if (person > name) {
            first = middle+1;
        } else {
            break;
        }

最佳答案

你知道元素的数量和数据结构允许你随机访问任何元素:

const int middleOffset = ((int*)foo)[num/2];
string middleName = ((char*)foo)+middleOffset;

关于c++ - 二进制搜索到达文件中间的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6966462/

相关文章:

c++ - 更改指向 unique_ptr 的变量

c++ - 如何将用户从控制台输入的内容读入 Unicode 字符串?

c++ - 使用 OpenCV 确定草绘箭头的方向

php - 如何向 html 表格的列添加搜索和过滤器?

php - 哪个搜索/标签系统更好?

java - 无法解析相应的 jni 函数

search - Spotify 网络链接搜索

c - C 中指针的困难

c++ - 指向基类的成员指针

c++ - 将数组传递给函数 C++