Je suis en train de faire un travail où on m'a donné un programme qui lit un fichier de données et sort les données dans un tableau d'octets, où les 4 premiers octets du tableau vous disent combien de noms de personnes il a (le fichier de données contient). Suit le reste du tableau qui contient les chaînes de caractères des noms des personnes. Ce tableau est pointé par un const void * foo;
Par exemple, les 4 premiers octets indiquent qu'il y a 5 noms stockés dans le tableau, et les 4 octets suivants vous indiquent l'adresse du nom de la personne. Le nom de la personne est stocké dans le tableau
int num = ((int*)foo)[0];
const int ppl1 = ((int*)foo)[1];
string name = ((char*)foo)+ppl1;
donc num
vous dira qu'il y a 5 noms dans le tableau et ppl1
vous indiquerait la position du tableau où vous pouvez trouver le prénom et le nom recueille le nom de la personne située à cet emplacement du tableau.
En gros, on me donne un nom à rechercher dans le tableau, et je voulais utiliser la recherche binaire pour le faire. Je ne connais pas de moyen de trouver le milieu du fichier, pouvez-vous me donner quelques indications ?
merci =]
EDIT : j'ai donc créé ceci, mais il y a des défauts et ne fonctionne que dans un seul cas (lors de la recherche de la première entrée). Je ne sais pas pourquoi...
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;
}