Per farla breve, il codice corretto e funzionante dovrebbe essere
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ricerca_binaria(char chiave[], char *parole[], int n);
int main ()
{
char chiave[50];
int n=22, indice;
char *parole[]={"Abbattere","Abitante del sud","Affamato","Alzato","Avventura","Cane","Compleanno","Fondere","Gamba","Incontrare","Intenso","Maiale","Misto","Nota","Passeggiata","Potere","Quantità","Ristampa","Ritornare","Tempestivo","Vivace","Vuoto"};
char *parole2[]={"abbattere","abitante del sud","affamato","alzato","avventura","cane","compleanno","fondere","gamba","incontrare","intenso","maiale","misto","nota","passeggiata","potere","quantitò","ristampa","ritornare","tempestivo","vivace","vuoto"};
char *vocab[]={"Overthrow","Southerner","Hungry","Up","Adventure","Dog","Birthday","Found","Leg","Encounter","Intense","Pig","Mixed","Note","Walk-over","Can","Quantity","Reprint","Go back","Timely","Zippy","Void"};
printf("Inserisci la frase da tradurre : ");
gets(chiave);
//*Questa funzione da quel che ho appena approfondito mi "spacchettera" la frase in parole *//
char *word = strtok(chiave," .");
//*questo procedimento verrà effetuato fino a che la frase non sia terminata *//
while (word != NULL)
{
indice= ricerca_binaria (word,parole,n);
if (indice<0)
indice=ricerca_binaria (word,parole2,n);
if(indice>=0)
printf("%s: %s\n",word,vocab[indice]);
else
printf("%s: (Parola non trovata)\n",word);
word = strtok (NULL," .");
}
return 0;
}
int ricerca_binaria(char chiave[], char *parole[], int n)
{
int mediano, primo=0, ultimo=n-1;
while (primo<=ultimo)
{
mediano=(primo+ultimo)/2;
if(strcmp(chiave,parole[mediano])==0)
return mediano;
else if(strcmp(chiave,parole[mediano])<0)
ultimo=mediano-1;
else
primo=mediano+1;
}
return -1;
}