我正在做一个作业,我得到了一个程序,该程序读取数据文件并将数据吐出到字节数组中,其中数组的前 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/