Problema esercizio anagramma

di il
10 risposte

Problema esercizio anagramma

Salve ho da fare il seguente esercizio... inserite due parole da tastiera devo verificare se sono una l'anagramma dell altra... mi da problemi nella funzione di controllo...ecco il codice

#include <iostream>
#include <cstring>
using namespace std;

void riempi(char stringa1[],char stringa2[],char copia1[],char copia2[],char temp) //con questa funzione copio le due stringhe inserite da tastiera
{                                                                               // e le ordino in ordine alfabetico    
    for(int i=0;i<strlen(stringa1);i++)                                            
    copia1[i]=stringa1[i];

    for(int x=0;x<strlen(stringa2);x++)
    copia2[x]=stringa2[x];

     for(int i=0;i<strlen(stringa1);i++)
     {
       for(int x=0;x<strlen(stringa2);x++)
       {
           if(copia1[i]<copia1[x])
           {
               temp=copia1[x];
               copia1[x]=copia1[i];
               copia1[i]=temp;
           }

       }

     }

 for(int i=0;i<strlen(stringa1);i++)
     {
       for(int x=0;x<strlen(stringa2);x++)
       {
           if(copia2[i]<copia2[x])
           {
               temp=copia2[x];
               copia2[x]=copia2[i];
               copia2[i]=temp;
           }

       }

     }

}

bool controllo(char copia1[],char copia2[]) //questa funzione controlla se le due stringhe sono uguali e se si ritorna true
 {
    for(int x=0;x<strlen(copia1);x++)
        for(int i=0;i<strlen(copia2);i++)
            if(copia1[x] != copia2[i])
            return false;
            return true;
}

int main()
{
    char temp;
    char stringa1[15];
    char stringa2[15];
    char copia1[15];
    char copia2[15];

    cout<<"inserisci la parola n. 1 :"<<endl;
    cin>>stringa1;
    cout<<"inserisci la parola n. 2 :"<<endl;
    cin>>stringa2;

    riempi(stringa1,stringa2,copia1,copia2,temp);
/*
for(int x=0;x<strlen(stringa1);x++)
cout<<copia1[x];

cout<<endl;

for(int x=0;x<strlen(stringa1);x++)
cout<<copia2[x];
*/

if(controllo(copia1,copia2)==true)
cout<<"anagramma";
else
cout<<"non anagramma";

    return 0;
}



10 Risposte

  • Re: Problema esercizio anagramma

    Quali problemi? Spiega quello che hai scritto ...
  • Re: Problema esercizio anagramma

    oregon ha scritto:


    Quali problemi? Spiega quello che hai scritto ...
    allora con la funzione "riempi" copio il contenuto delle due stringhe rispettivamente in copia1 e copia2.... una volta copiati i caratteri li ordino in ordine alfabetico.... esempio: stringa1=cane
    , stringa2=pane... allora copia1=acen e copia2=aenp...
    passo le copie alla funzione 'controllo' che dovrebbe restituire false, invece mi da true
  • Re: Problema esercizio anagramma

    Cominciamo dall'inizio ...

    Se vuoi copiare una stringa usa la funzione strcpy che provvede anche alla copia del terminatore della stringa (che tu non copi)
  • Re: Problema esercizio anagramma

    oregon ha scritto:


    Cominciamo dall'inizio ...

    Se vuoi copiare una stringa usa la funzione strcpy che provvede anche alla copia del terminatore della stringa (che tu non copi)
    ho usato strcpy ma non cambia nulla .... mi da sempre lo stesso errore
  • Re: Problema esercizio anagramma

    Avevo detto "cominciamo" ... non c'è la "bacchetta magica" ... probabilmente ci sono "molti" errori e vanno corretti uno ad uno ... pazienza ...
  • Re: Problema esercizio anagramma

    oregon ha scritto:


    Avevo detto "cominciamo" ... non c'è la "bacchetta magica" ... probabilmente ci sono "molti" errori e vanno corretti uno ad uno ... pazienza ...
    mmmmmm ok...non mi abbandonare però che voglio finirlo sto esercizio
  • Re: Problema esercizio anagramma

    Ok ... il parametro

    char temp

    non ha senso.

    Semmai ti serve una variabile locale nella funzione

    char temp;

    Ovviamente questo NON è il problema.

    Ma spiegami un po' meglio ... quale "metodo" (algoritmo) hai pensato di usare per controllare se una parola "è/non è" anagramma di un'altra ? Perché non l'ho capito dal codice ...
  • Re: Problema esercizio anagramma

    oregon ha scritto:


    Ok ... il parametro

    char temp

    non ha senso.

    Semmai ti serve una variabile locale nella funzione

    char temp;

    Ovviamente questo NON è il problema.

    Ma spiegami un po' meglio ... quale "metodo" (algoritmo) hai pensato di usare per controllare se una parola "è/non è" anagramma di un'altra ? Perché non l'ho capito dal codice ...
    praticamente ordinando i caratteri delle due parole in ordine alfabetico e copiandone il contenuto in 'copia1' e 'copia2' vedo se copia1 e copia2 contengono gli stessi elementi nello stesso ordine... se è cosi allora sono anagrammi ...viceversa non lo sono.... (vedi esempio di sopra...cane e pane)
  • Re: Problema esercizio anagramma

    Ok, allora è la funzione controllo che è sbagliata ... usa la strcmp così
    
    bool controllo(char copia1[], char copia2[]) 
    {
    	if(strcmp(copia1, copia2) == 0) 
    		return true;
                
    	return false;
    }
    
  • Re: Problema esercizio anagramma

    oregon ha scritto:


    Ok, allora è la funzione controllo che è sbagliata ... usa la strcmp così
    
    bool controllo(char copia1[], char copia2[]) 
    {
    	if(strcmp(copia1, copia2) == 0) 
    		return true;
                
    	return false;
    }
    
    grazie mille dell aiuto cmq ho trovato un altro metodo.... ora provo anche con strcmp.... grazie mille per l aiuto e la pazienza
Devi accedere o registrarti per scrivere nel forum
10 risposte