PDA

Visualizza la versione completa : [C] Anagramma


ryan atwood
24-04-2010, 15:06
Salve,
questo programma funziona solo se inserisco due parole uguali, quindi non riconosce quando è un anagramma.. Come posso fare???



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (){
const int N=100;
typedef char t_string[N];
t_string s1,s2;
int i,j,l,l1,aux,x;
printf("inserisci una stringa: ");
gets(s1);
printf("inserisci seconda stringa: ");
gets(s2);
l=strlen(s1); // lunghezza s1
l1=strlen(s2); // lunghezza s2
x=strcmp(s1,s2);
if (x==0) {
for(i=0;i<l;i++)
for(j=0;j<l;j++)
if(s1[i]==s2[j]) aux=0;
if (aux==0) printf("e' un anagramma");
else printf("non e' un anagramma");
}
else printf("non e' un anagramma");
system ("pause");
return 0;
}

oregon
24-04-2010, 15:28
Non ho capito il problema ... spiegati meglio ...

Kej
24-04-2010, 15:53
Se ho capito bene, vuole controllare se una stringa S2 è l'anagramma di S1, dove S1 e S2 sono inserite dall'utente.
Come per esempio, "cane" e "acne".

Se fosse così, ti consiglio:

pseudocodice


- Acquisisci le due stringhe s1 e s2
- Ordinale tutte e due alfabeticamente
- confrontale: se sono uguali, allora hai trovato un'anagramma


Questo non prevede il riconoscimento di parole di senso compiuto...per questo crea una sorta di file "database" dove inserirai tutte le parole italiane di senso compiuto.

ryan atwood
24-04-2010, 16:05
Originariamente inviato da Kej
Se ho capito bene, vuole controllare se una stringa S2 è l'anagramma di S1, dove S1 e S2 sono inserite dall'utente.
Come per esempio, "cane" e "acne".

Se fosse così, ti consiglio:

pseudocodice


- Acquisisci le due stringhe s1 e s2
- Ordinale tutte e due alfabeticamente
- confrontale: se sono uguali, allora hai trovato un'anagramma


Questo non prevede il riconoscimento di parole di senso compiuto...per questo crea una sorta di file "database" dove inserirai tutte le parole italiane di senso compiuto.
Ciao,
faccio il terzo... il database ancora non l'abbiamo fatto... le parole non devono avere senso compiuto. Se alle stringa s1 inserisco cane, e nella s2 enac questo è un anagramma però il programma non me lo riconosce.

Kej
24-04-2010, 16:40
Con il codice che hai mostrato nel primo post non ti funziona perchè logicamente sbagliato, ripeto, segui quello che ti ho consigliato, facendo bene attenzione all'uso dell'algoritmo di ordinamento.
Con i miei consigli, verrebe:



inserisci una stringa: cane
inserisci seconda stringa: acne

"cane" ordinato: acen
"acne" ordinato: acen

Ora sono uguali, quindi hai trovato un anagramma

ryan atwood
26-04-2010, 18:23
Grazie, tutto ok...


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (){
const int N=100;
typedef char t_string[N];
t_string s1,s2,s3,s4;
int i,j,l,l1,aux,x,k;
printf("inserisci una stringa: ");
gets(s1);
printf("inserisci seconda stringa: ");
gets(s2);
strcpy(s3,s1); //copia s1 in s3
strcpy(s4,s2); //copia s2 in s4
l=strlen(s1); // lunghezza s1
l1=strlen(s2); // lunghezza s2
if (l==l1){
for(i=0;i<l1-1;i++)
for(k=i+1;k<l1;k++)
if(s3[i]>s3[k]){
x=s3[k];
s3[k]=s3[i];
s3[i]=x;
}
for(i=0;i<l1-1;i++)
for(k=i+1;k<l1;k++)
if(s4[i]>s4[k]){
x=s4[k];
s4[k]=s4[i];
s4[i]=x;
}
if(strcmp(s3,s4)==0) printf("le stringhe sono una anagramma dell altra\n");
else printf("le stringhe non sono una anagramma dell altra\n");
}
else printf("non anagramma\n");
system ("pause");
return 0;
}

Loading