Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    C++ Anagramma

    Salve sto implemetando un programmino che inserite due parole da input mi dica se queste sono un anagramma, come al solito sbaglio in qualcosa perche non mi viene
    ecco il codice e grazie:

    codice:
    # include <iostream>
    using namespace std;
    
    const int n=4;
    void creaArray (char [], char);
    void stampa (char[],char);
    bool verifica (char[],char[]);
    int main ()
    {
    	char parola;
    	char a[n];
    	char b[n];
    
    	creaArray (a,parola);
    	stampa(a,parola);
    	cout<<endl;
    	creaArray (b,parola);
    	stampa (b,parola);
    	
    	
    	if (verifica(a,b))
    	cout<<"e un anagramma"<<endl;
    	else
    	cout<<"non e un anagramma";
    	
    
    
    return 0;
    }
    
    
    void creaArray (char a[],  char parola)
    {
    	for (int i=0; i<n;i++)
    	{
    		cin>>parola;
    		a[i]=parola;
    	}
    		
    }// chiude creaArray
    
    
    void stampa (char imprimir[],char parola)
    {
    	for (int i=0;i<n;i++)
    	{
    	cout<<a[i];
    
    	}
    }// chiude stampa
    
    
    bool verifica (char a[], char b[])
    {
    	for (int i=0;i<n;i++)
    	{
    		for (int j=0;j<n;j++)
    		
    		if (a[i]!=b[j])
    		return false
    	}
    	
    	return true;
    	
    }// chiude verifica

  2. #2
    Quali sono i problemi che riscontri? Parte del programma viene eseguita correttamente?

    Qui:

    codice:
    void stampa (char imprimir[],char parola)
    {
    	for (int i=0;i<n;i++)
    	{
    	cout<<a[i];
    
    	}
    }// chiude stampa
    nell'intestazione hai "char imprimir []" e poi nel corpo della funzione utilizzo un array "a", credo che il compilatore ti dia errore...
    In ogni caso, la funzione verifica è sbagliata dal punto di vista della logica: quello che devi implementare devi verificare due cose contemporanemante, in quanto ogni lettera della prima stringa deve essere presente nela seconda stringa, ma (attenzione!) deve esserlo con la stessa frequenza con cui lo è nella prima stringa.

    Esempio: prendiamo le parole "ciac" e "cia", se io controllo solo che ogni lettera della prima sia contenuta nella seconda, avrò una risposta positiva; se però vado a controllare la loro frequenza noterò che la lettera 'c' compare due volta in "ciac" e una sola in "cia", deducendone che le parole non sono una l'anagramma dell'altra.
    A questo punto, una soluzione non ottimizzata è creare una funzione che conti la frequenza di un carattere in una stringa ed utilizzarla per confrontare le due stringhe, per verificare che i caratteri della prima compaiano con la stessa frequenza nella seconda.
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Ho pensato di azzerare l'elemento ogni volta che trova uno nell'altra stringa cosi se ne trova due è come se ripartissi da capo.
    penso cosi risolvo
    grazie per il tuo aiuto

  4. #4
    Originariamente inviato da marcos666
    Ho pensato di azzerare l'elemento ogni volta che trova uno nell'altra stringa cosi se ne trova due è come se ripartissi da capo.
    penso cosi risolvo
    grazie per il tuo aiuto
    La "strategia" è più semplice di quanto tu possa pensare..

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Cerca nel forum: è un problema che è stato affrontato e risolto diverse volte.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.