Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    6

    [C++] Confronto stringa e file di testo

    Salve a tutti, avrei bisogno di un aiuto per un programma.
    Ho il codice che mi genera gli anagrammi di una certa parola data in input, io vorrei fare in modo che mi stampi solamente le parole di senso compiuto; il metodo migliore che mi è venuto in mente è stato quello di comparare ogni anagramma generato (salvato su una variabile stringa) con un file di testo che contiene praticamente tutte le parole italiane, una per riga, senza spazi.
    Potete aiutarmi?

    Ecco il programma
    codice:
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std ;
    
    void anagramma(string radice, string s, int livello)
    {
         for (int i = 0; i < s.size(); i++)
         {
             string t = radice + s[i];
    
             if (t.size() == livello)
             {
                cout << t << endl ;
             }
    
             anagramma(t, s.substr(0, i) +
                          s.substr(i + 1), livello);
         }
    }
    
    void calcola_anagrammi(string s)
    {
         anagramma("", s, s.size());
    }
    
    int main()
    {
        string my_string;
    
        cout << "Inserire la stringa da anagrammare : ";
        cin  >> my_string;
    
        calcola_anagrammi(my_string);
    
        return 0 ;
    }
    mi servirebbe il controllo per la variabile t

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Cosa non sai fare ? Non sai leggere da un file ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    6
    Non so come controllare una riga intera alla volta, non so cosa usare... penso sia uno tra cin.get o cin.getline con cin.ignore ma non ho mai capito bene come funzionano dato che li ho visti utilizzare spesso per apparentemente lo stesso motivo.

  4. #4
    Credo che una soluzione più furba potrebbe essere questa:
    • apri il file con tutte le parole;
    • crei una multimap<string, string>
    • leggi dal file una parola alla volta e fanne due copie; in una metti i caratteri in ordine alfabetico, l'altra la tieni così;
    • memorizza la parola nella multimap, usando la versione ordinata come chiave e quella originale come valore;
    • quando cerchi un anagramma di una parola, fanne una copia, metti i caratteri in ordine alfabetico ed effettua una ricerca nella multimap; otterrai tutti gli anagrammi validi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    6
    Purtroppo non conosco la multimap, e sono convinto che sarebbe più semplice, però vorrei riuscire a capire perchè non riesco a farlo in questo modo.

    codice:
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std ;
    
    fstream input;
    
    void anagramma(string radice, string s, int livello)
    {
         char parola[30];
         string q;
    
         for (int i = 0; i < s.size(); i++)
         {
             string t = radice + s[i];
    
             if (t.size() == livello)
             {
                while(input.eof()){
                input.getline(parola, 30);
                q.assign(parola);
                if(q.compare(t)==0)
                cout << t << endl ;
                            }
             }
    
             anagramma(t, s.substr(0, i) +
                          s.substr(i + 1), livello);
         }
    }
    
    void calcola_anagrammi(string s)
    {
         anagramma("", s, s.size());
    }
    
    int main()
    {
        string my_string;
        input.open("words.italian.txt", ios::in);
    
        cout << "Inserire la stringa da anagrammare : ";
        cin  >> my_string;
    
        calcola_anagrammi(my_string);
    
        return 0 ;
    }
    Così non mi da nessun anagramma, quindi il controllo non va bene, ma in altri programmi che ho fatto questo controllo andava bene, non capisco come mai.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    6
    Sono riuscito a farlo, però sono venuto incontro ad un altro inconveniente...
    Per ogni anagramma che trova, deve controllare se la parola è presente nel file di testo, e praticamente smette di funzionare per timeout prima ancora di finire la lettera A, infatti mi genera solo le parola di inizio alfabeto controllate sul primo anagramma che calcola.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.