Sto preparando un piccolo compito dove devo utilizzare in maniera ricorsiva la ricerca binaria di una stringa. Il problema è che la funzione restituisce vero se inserisco cile, quindi la prima parola dell'elenco che verifica, altrimenti sempre falso. Dove sbaglio
?
Grazie, ciao.
#include <iostream>
using namespace std;
bool ricercaBinariaR(char *a[], int i, int j, char *x) {
int m = (i + j) / 2;
if (strcmp(a[m], x) == 0)return true ; // trovato
else {
if(strcmp(a[m], x) > 0) j = m - 1;
else i = m + 1;
if(i > j)return false; // non trovato
else ricercaBinariaR(a, i, j, x);
}
}
int main (int argc, char *argv[]) {
if(argc != 2) {
cout << "Uso: " << endl;
cout << " ricercaBinariaI \"[stringa max 255 caratteri]\"" << endl;
cout << " Il programma cerca in un'array di stringhe definita internamente" << endl
<< " la stringa specificata (tra apici) come argomento" << endl << endl;
exit(1);
}
char ricerca[256];
strncpy(ricerca, argv[1], 255);
char *a[] = {
"Argentina",
"Bolivia",
"Brasile",
"Cile",
"Colombia",
"Equador",
"Nicaragua",
"Venezuela"
};
cout << (ricercaBinariaR(a, 0, 7, ricerca) ? "1" : "0") << endl;
}