Dizionario + Ricerca 3 caratteri uguali

di il
4 risposte

Dizionario + Ricerca 3 caratteri uguali

Salve ragazzi,ho visto già che esiste un thread simile,ma data la poca educazione di chi lo ha postato è stato chiuso.
In pratica ho il suo stesso codice,con il suo stesso problema (Mi fa ricercare solo 3 lettere per confrontarle con le ultime 3 di un altra parola)
Devo fare in modo che,con la chiave data all'inizio,mi trovi una parola nel dizionario corrispondente che abbia almeno 3 caratteri consecutivi uguali (In qualsiasi posizione della parole,non solo alla fine)

( Richiesta: - DATA UNA PAROLA RICERCARE NEL DIZIONARIO TUTTE LE PAROLE CHE HANNO ALMENO TRE LETTERE CONSECUTIVE E IN COMUNE CON LA PAROLA DATA - )
Qualcuno sarebbe pronto ad aiutarmi?
#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","Bucare","Buddismo","Buongiorno","Carne","Chioma","Cicca","Collare","Coppia"};
char *parole2[]={"abete","abiosfera","abisso","antonio","argilla","bambu","bomba","bucare","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[10];
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);
m=strlen(testo);
if (testo[m-3]==finepar[0] && testo[m-2]==finepar[1] && testo[m-1]==finepar[2])
{
printf("%s ",parole);
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;
}

4 Risposte

  • Re: Dizionario + Ricerca 3 caratteri uguali

    Gets() non esiste più nello standard C. Utilizza fgets.

    Inoltre indenta bene quel codice e rendilo leggibile. Dichiara e inizializza le variabili quando ti servono e su righe separate. Gli indici dei cicli for si possono dichiarare nel ciclo stesso. Non è C89
  • Re: Dizionario + Ricerca 3 caratteri uguali

    Stesso codice e stesso problema ... che caso ... ... il tizio di prima avrebbe fatto bene a scusarsi e a postare il problema correttamente ... ma ce ne faremo una ragione ...

    Comunque ...

    "almeno tre lettere consecutive" non vuol dire solo all'inizio o solo alla fine ma ovunque all'interno.

    Quindi dovrai prendere tutte i gruppi di 3 lettere contenute nella parola che cerchi e confrontarle con tutti i gruppi di 3 lettere di ogni parola (per semplificare opera con parole tutte minuscole). Ad esempio, se cerchi la parola

    dizionario

    dovrai prendere i gruppi

    diz
    izi
    zio
    ion
    ona
    nar
    ari
    rio

    e confrontarli con tutti i gruppi di 3 lettere di ogni parola del dizionario.
  • Re: Dizionario + Ricerca 3 caratteri uguali

    Ciao,posso assicurarti che sono un'altra persona..il codice l'ho preso da lui anche perchè se ne trova una copia simile Online sulla ricerca binaria per le parole del dizionario..comunque:

    Come posso strutturare un ciclo for che scorre una parola ogni 3 lettere confrontandole con ogni 3 lettere di ogni parola del dizionario ?
  • Re: Dizionario + Ricerca 3 caratteri uguali

    Comincia con scrivere la for che permette di accedere ai gruppi di 3 lettere come ti ho mostrato (hai letto?).
Devi accedere o registrarti per scrivere nel forum
4 risposte