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.