Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Anagramma

  1. #1

    [C] Anagramma

    Salve,
    questo programma funziona solo se inserisco due parole uguali, quindi non riconosce quando è un anagramma.. Come posso fare???

    codice:
    #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;
    }
    Il mio Portfolio Flickr

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito il problema ... spiegati meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    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
    codice:
    - 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.

  4. #4
    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
    codice:
    - 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.
    Il mio Portfolio Flickr

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    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:

    codice:
    inserisci una stringa: cane
    inserisci seconda stringa: acne
    
    "cane" ordinato: acen
    "acne" ordinato: acen
    
    Ora sono uguali, quindi hai trovato un anagramma

  6. #6
    Grazie, tutto ok...
    codice:
    #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;
    }
    Il mio Portfolio Flickr

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.