Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Problema confronto carattere con elementi di array

    Salve a tutti.
    Sto provando a realizzare un programma che:
    1) legge una stringa da file
    2) crea in un vettore un insieme di tutti i caratteri della stringa, senza ripetizioni [es: casa -> vettore('c','a','s') ]
    3) calcola, per ogni elemento di questo vettore, le occorrenze di quel carattere in tutta la stringa e inserisce il valore in un altro vettore, in modo da creare "simmetria" tra carattere e occorrenza [es: casa -> vettoreCaratteri('c','a','s') -> vettoreOccorrenze(1,2,1) ]

    Il problema che mi da è che non mi inserisce un carattere all'interno di questo vettoreCaratteri. Provando con alcune frasi non mi da errori, ma se inserisco come frase "la casa sulla collina", la prima c non me la inserisce (o meglio, non me la stampa a video), ma è come se l'avesse inserita.
    In altre parole l'output dovrebbe essere:
    codice:
    Carattere l inserito in posizione k 0
    Carattere a inserito in posizione k 1
    Carattere  (spazio) inserito in posizione k 2
    Carattere c inserito in posizione k 3
    Carattere s inserito in posizione k 4
    Carattere u inserito in posizione k 5
    Carattere o inserito in posizione k 6
    Carattere i inserito in posizione k 7
    Carattere n inserito in posizione k 8
    Invece nell'output che mi viene dato manca la printf relativa al carattere c, eppure non me lo inserisce dopo , è come se lo trovasse quando verifica se è già presente, eppure non me lo stampa.
    Com'è possibile?
    Se inserisco come frase "la casa", funziona perfettamente.

    Qui di seguito sono riportate le funzioni principali del programma, l'errore credo sia nella funzione creaVettoreCaratteri, perchè ho inserito quel printf di controllo e la c, come già detto sopra, non me la stampa.

    codice:
    /*
        Verifica che il carattere non sia già presente nel vettore.
    */
    bool verificaPresenzaCarattere(char c, int len, char vett[]){
        int i;
        for(i=0; i<len; i++){
            if(c==vett[i]){
                return true;
            }
        }
        return false;
    }
    
    /*
        Crea un insieme di tutti i caratteri presenti nella stringa, senza duplicati.
        Vengono esclusi i segni di punteggiatura e gli spazi.
    */
    int creaVettoreCaratteri(char str[], char letter[]){
        int i, k=0;
        for(i=0; i<strlen(str); i++){
            if(!verificaPresenzaCarattere(str[i], strlen(str), letter)){
                letter[k]=str[i];
                printf("Carattere %c inserito in posizione k %d\n", letter[k], k);
                k++;
            }
        }
        return k;
    }
    
    /*
        Conta le occorrenze del carattere all'interno della stringa e ne restituisce il valore.
    */
    int contaOccorrenze(char c, char str[]){
        int i;
        int tot=0;
        for(i=0; i<strlen(str); i++){
            if(str[i]==c){
                 tot++;   
            }    
        }
        return tot;
    }
    
    /*
        Crea il vettore di occorrenze.
    */
    void creaVettoreOccorrenze(char str[], char letter[], int dimLetter, int occ[]){
        int i;
        for(i=0; i<dimLetter; i++){
            occ[i]=contaOccorrenze(letter[i], str);
        }
    }
    Le altre funzioni sono semplicemente la funzione di lettura da file (che funziona) e il main, dove vengono semplicemente creati i vettori e richiamate le funzioni.

    Qualcuno sa darmi una mano? Spero sia tutto chiaro, in caso contrario cercherò di chiarire ulteriormente.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E il main?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Main:
    codice:
    int main(){
        char file[30];
        char str[700];
        char letter[26];
        int occorrenze[26];
        int dimVett, i;
        
        printf("Insert file name: ");
        scanf("%s", file);
        
        leggiStringa(file, str);
        printf("\nString:\n%s\n", str);
        
        dimVett=creaVettoreCaratteri(str, letter);
        
        creaVettoreOccorrenze(str, letter, dimVett, occorrenze);
    
        system("PAUSE");
        return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Senza leggere da file, preimpostando la stringa, con il tuo codice ottengo

    la casa sulla collina
    Carattere l inserito in posizione k 0
    Carattere a inserito in posizione k 1
    Carattere inserito in posizione k 2
    Carattere c inserito in posizione k 3
    Carattere s inserito in posizione k 4
    Carattere u inserito in posizione k 5
    Carattere o inserito in posizione k 6
    Carattere i inserito in posizione k 7
    Carattere n inserito in posizione k 8

    e non mi pare che manchi nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    Senza leggere da file, preimpostando la stringa, con il tuo codice ottengo

    la casa sulla collina
    Carattere l inserito in posizione k 0
    Carattere a inserito in posizione k 1
    Carattere inserito in posizione k 2
    Carattere c inserito in posizione k 3
    Carattere s inserito in posizione k 4
    Carattere u inserito in posizione k 5
    Carattere o inserito in posizione k 6
    Carattere i inserito in posizione k 7
    Carattere n inserito in posizione k 8

    e non mi pare che manchi nulla ...
    Ora non mi da più problemi, sinceramente non capisco come sia possibile. Mi ha dato problemi fino ad oggi pomeriggio. Ora ho riprovato e non lo fa. Che diavolo è? Possono essere problemi legati al file txt? Il codice è lo stesso che ho postato, non è modificato di una virgola.
    Infatti io non riuscivo proprio a capire dove fosse il problema, ma ora sono ancora più confuso

  6. #6
    Originariamente inviato da goatboy
    Possono essere problemi legati al file txt? Il codice è lo stesso che ho postato, non è modificato di una virgola.
    Sì, come è possibile che non avessi ricompilato il file dopo aver modificato il codice.

    Ciao

  7. #7
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da MdE2005
    Sì, come è possibile che non avessi ricompilato il file dopo aver modificato il codice.

    Ciao
    No, il codice lo ricompilo sempre dopo ogni modifica.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Poteva essere un problema del file di testo
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Originariamente inviato da oregon
    Poteva essere un problema del file di testo
    Non lo scopriremo mai
    Scusate v'ho fatto perdere tempo
    Grazie a tutti per l'aiuto

  10. #10
    Originariamente inviato da goatboy
    Scusate v'ho fatto perdere tempo
    Grazie a tutti per l'aiuto
    Figurati, siamo qui a posta

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.