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:
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.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
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.
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.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); } }
Qualcuno sa darmi una mano? Spero sia tutto chiaro, in caso contrario cercherò di chiarire ulteriormente.


Rispondi quotando
