Codice Fiscale

di il
3 risposte

Codice Fiscale

Salve a tutti, allora starei creando un programmino in c++ che calcoli il codice fiscale... per adesso ho appena iniziato e la prima cosa che mi serve è prendere le prime 3 consonanti dal cognome. Ma il codice che ho scritto sembra non funzionare per niente! di seguito potete leggere il codice, che per non so quale ragione mi scrive il cognome al contrario! ... insomma è come se non consideri la variabile "chiudi" che dovrebbe interrompere il ciclo non appena la variabile cgn possiede tutte e 3 le consonanti... credo che almeno l'analisi sia giusta, forse sbaglio qualcosa nel codice, non so... qualcuno ha qualche suggerimento? grazie a tutti
int chiudi=0;
    
    for (int i=0; i < cognome.length() || chiudi < 4; i++) 
    {
        if (cognome.substr(i,1) != "a" || "e" || "i" || "o" || "u")
        {
           cgn = cognome.substr(i,1) + cgn;
           chiudi = chiudi + 1;
        }
    }
    
    cout << endl << cgn;

3 Risposte

  • Re: Codice Fiscale

    Allora ci sono diversi errori.
    il primo piu grosso è che nell' if dopo ogni or devi tornare a confrontare la variabile:
    
    //ERRATO
    if (a = 1 || 2 || 3)
    //GIUSTO
    if (a=1 || a=2 || a=3) 
    
    il secondo è l'errato uso degli operatori booleani.
    sempre nell'if entri sempre perchè per forza un carattere è diverso da tutti quelli elencati:

    se il carattere ad esempio è a:

    carattere !=a (false) || carattere !=b (true) allora entro nell'if.....

    devi quindi usare l'and perchè deve sessere diverso da tutte le vocali.
    Stesso errore per il ciclo for,il ciclo continua fintanto che il confronto è vero e quindi
    supponiamo che le variabili siano:
    chiudi=5
    strlen=10
    i=3
    avremo:
    chiudi < 3 (false) || i < strlen (true) continuo perchè false || true = true
    anche qui allora si usa l'and
    chiudi < 3 (false) || i < strlen (true) mi fermo perchè false && true = false
    
    for (unsigned int i=0; chiudi < 3 && i < cognome.length(); i++)
        {
            if (cognome.substr(i,1) != "a" && cognome.substr(i,1) != "e" &&
                cognome.substr(i,1) != "i" &&  cognome.substr(i,1) != "o" && 
                cognome.substr(i,1) != "u")
            {
               cgn += cognome.substr(i,1);
               chiudi++;
            }
        }
    
        cout << endl << cgn;
    
    [dimenticavo]
    il ciclo inizia da zero quindi per tre consonanti chiudi dovrà essere minore di 3 e non di 4!
    [/dimenticavo]
  • Re: Codice Fiscale

    Grazie per la risposta, ancora non mi sono abitutato alla sintassi del c++ adesso funziona, ma c'è un piccolissimo problema... prende si le prime 3 consonanti, ma al contrario cioè nella parola "penna" dovrebbe prendere le prime 3 consonanti e cioè: "pnn", invece quando vado a visualizzare la stringa mi prende "nnp" non capisco
  • Re: Codice Fiscale

    Perchè tu fai
    
    cgn = cognome.substr(i,1) + cgn;
    
    quindi cgn sarà uguale alla lettera + l'altra parte di cgn,quindi in pratica la inverti.
    facendo
    
    cgn += cognome.substr(i,1);
    
    inserisco alla fine di cgn il carattere.
Devi accedere o registrarti per scrivere nel forum
3 risposte