Ecco il codice completo che ho fatto
Riconosce sia parole che cominciano in minuscolo che in maiuscolo.
al secondo blocco se non vengono inseriti tre caratteri non va avanti e ripete il processo
credo vada bene
#include <stdio.h>
#include <string.h>
int ricerca_binaria(char chiave[], char *parole[], int n);
void main()
{
char chiave[10];
int n,indice,m,i,res=0;
char *parole[]={"Abete","Abiosfera","Abisso","Antonio","Argilla","Bambu","Bomba","Buca","Buddismo","Buongiorno","Carne","Chioma","Cicca","Collare","Coppia"};
char *parole2[]={"abete","abiosfera","abisso","antonio","argilla","bambu","bomba","buca","buddismo","buongiorno","carne","chioma","cicca","collare","coppia"};
char *vocab[]={"Nome di alcuni alberi","Parte del nostro pianeta dove non e' possibile la vita","Luogo in cui la grande profondita' conferisce un aspetto buio e pauroso","Nome proprio di persona","Tipo di roccia sedimentaria","Nome comune di una pianta","Involucro contenente esplosivo","Cavita del terreno","Religione indiana","Forma di saluto","La parte dei tessuti molli del corpo","Folta capigliatura","Avanzo di sigaro o di sigaretta","Oggetto da mettere al collo degli animali","Abbinamento di due cose o persone"};
char testo[20],finepar[3];
printf("Inserisci la parola da cercare: ");
gets(chiave);
n=15;
indice=ricerca_binaria(chiave,parole,n);
if (indice<0)
{
indice=ricerca_binaria(chiave,parole2,n);
}
if(indice>=0)
{
printf("%s: %s\n",chiave,vocab[indice]);
}
else
printf("Chiave non trovata\n");
do
{
printf("Inserisci altri tre caratteri: ");
gets(finepar);
} while(strlen(finepar)!=3);
printf("Ecco le parole che terminano per %s\n",finepar);
for(i=0;i<n;i++)
{
strcpy(testo,parole[i]);
m=strlen(testo);
if (testo[m-3]==finepar[0] && testo[m-2]==finepar[1] && testo[m-1]==finepar[2])
{
printf("%s ",parole[i]);
res++;
}
}
if(res==0)
printf("Nessun risultato\n");
getch();
}
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;
}