Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [c++] ESERCIZIO ARRAY DI PUNTATORI CHAR

    Ho svolto questo esercizio...mi compila ma mi da un errore "il programma ha smesso di funzionare ecc..." in fase di esecuzione! Cosa non va??

    La tua amica Renata Limbranata è nei guai. Si è sposata solo pochi giorni fa eppure il suo matrimonio sembra già andare a rotoli. Suo marito passa la maggior parte del giorno al computer a scrivere mail di lavoro (dice lui!), ma lei è molto sospettosa, non riesce a credere che si sia portato il lavoro anche in viaggio di nozze… E così ha deciso! Approfittando delle assenze del marito ti ha inoltrato tutte le sue mail (circa un centinaio), pregandoti di leggerle e farle sapere se, come sospetta lei, il marito ha un’amante. Tu però, che conosci Renata e che sai quanto possa essere paranoica a volte, decidi di non sprecare belle giornate a leggere mail con molta probabilità noiose e di affidarti alle tue abilità informatiche per risparmiare tempo. A tale scopo, si scriva in C++ un programma completo opportunamente modularizzato in funzioni che, dato in input l’elenco delle mail di Renata (che per semplicità si può implementare come array di stringhe) conti quante sono le mail in cui è contenuta almeno una tra le seguenti parole: amore, tesoro, cucciolotto, trottolino.

    MIA SOLUZIONE:
    codice:
    #include <iostream>
    using namespace std;
    
    int confronta(char *email[], char  *parole[]);
    
    int main(){
        int numero_email=0;
    char *email[10]={"Ciao amore come va","senti tesoro", "sei un cretino" };
    char *parole[10]={"amore","tesoro","cucciolotto", "trottolino"};
    numero_email=confronta(email,parole);
    cout<<"Il numero delle email sospette è:"<<numero_email<<endl;
       
        
    system("pause");
    return 0;
    }
    
    int confronta(char *email[], char  *parole[]){
         int conta=0;
         for(int i=0; email[i]; i++){
                 for(int j=0; parole[i]; j++){     
            if(email[i] == parole[j])
            conta++;
            }
           }
    return conta;      
    }

  2. #2
    Mah....da quello che ho studiato l'istruzione:

    char *email[10]={"Ciao amore come va","senti tesoro", "sei un cretino" };

    dovrebbe inizializzare i restanti termini dell'array a zero. Ma a quanto pare non lo fa e credo che questo:
    codice:
    for(int i=0; email[i]; i++){
                 for(int j=0; parole[i]; j++){     
                      if(email[i] == parole[j])
                      conta++;
                 }
    }
    sia un ciclo infinito.
    Forse dipende dal compilatore...prova a inizializzare tu i rimanenti termini a zero... (o meglio, NULL)

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    int confronta(char *email[], char  *parole[]){
         int conta=0;
         for(int i=0; email[i]; i++){
                 for(int j=0; parole[j]; j++){       // parole[j], non parole[i]
            if(email[i] == parole[j])
            conta++;
            }
           }
    return conta;      
    }
    Se c'era parole[i] il ciclo andava avanti all' infinito perchè inizialmente i è uguale a zero, ma nel for interno i non viene incrementato, per cui controlla sempre che parole[0] non sia NULL,e non si usciva mai dal ciclo.
    E' indentato malissimo comunque.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    Ops!!! E' vero! Errore di distrazione! Corretto questo errore...adesso non mi funziona correttamente! Ho provato in vari modi ma niente...mi restituisce 0 invece dovrebbe restituire 2! Mi sorge un dubbio: Quegli array di puntatori a char sono corretti?!
    Ora la versione corretta è questa:
    codice:
    #include <iostream>
    using namespace std;
    
    int confronta(char *email[], char  *parole[]);
    
    int main(){
        int numero_email=0;
    char *email[4]={"Ciao amore come va","senti tesoro", "sei un cretino" };
    char *parole[5]={"amore","tesoro","cucciolotto", "trottolino"};
    numero_email=confronta(email,parole);
    cout<<"Il numero delle email sospette e':"<<numero_email<<endl;
       
        
    system("pause");
    return 0;
    }
    
    int confronta(char *email[], char  *parole[]){
         int conta=0;
         for(int i=0; email[i]; i++){
                 for(int j=0; parole[j]; j++){     
            if(email[i] == parole[j])
            conta++;
            }
           }
    return conta;      
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Primo ... non si confrontano così

    if(email[i] == parole[j])

    le stringhe del C

    (fra l'altro, perché non hai usato le stringhe del C++?)


    Secondo ... in ogni caso, confronti delle frasi con delle parole ... devi controllare se le parole sono "contenute" nelle frasi ed è tutta un'altra storia.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    In grassetto le mie risposte:

    Originariamente inviato da oregon
    Primo ... non si confrontano così

    if(email[i] == parole[j])

    Ops... ho rimesso questo al posto della strcmp()

    le stringhe del C

    (fra l'altro, perché non hai usato le stringhe del C++?)

    il motivo è che sto preparando un esame di fondamenti di informatica e quindi non posso usare le "string" ma solo array di char

    Secondo ... in ogni caso, confronti delle frasi con delle parole ... devi controllare se le parole sono "contenute" nelle frasi ed è tutta un'altra storia.

    Quindi dovrei separare le parole della frase con strtok() e metterle in array separati confrontando ogni volta se contengono una di quelle parole?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Sì ... puoi usare la strtok ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.