PROBLEMA Esercizio linguaggio C : trovare la lettera maiuscola più presente nella frase

tsle

Nuovo Utente
13
1
Buongiorno a tutti, credo di essere sulla buona strada ma non riesco a stampare la frase di fine programma: la parola più utilizzata è: .....
Non riesco a capire il motivo, qualcuno potrebbe aiutarmi?
Il testo dell' esercizio è sopra il codice






C:
/*
Si implementi una funzione C di prototipo:
char mostFrequentLetter(char *str, int *num_freq);
che riceva in ingresso una stringa e che restituisca il carattere che compare pi`u frequentemente.
Tale funzione dovr`a restituire anche il numero di occorrenze del carattere pi`u frequente, attraverso
il parametro di output num freq passato per riferimento. Si assuma che la stringa sia composta
solo da caratteri maiuscoli. Se vi `e pi`u di un carattere con la stessa frequenza, tra questi si ritorni
il primo in ordine alfabetico. Se la stringa ha lunghezza 0 o il puntatore str `e NULL, si restituisca
il carattere di terminazione stringa (’\0’) e frequenza num freq settata a 0.
*/


char mostFrequentLetter(char str[80], int num_freq[80]){
    


int i, str_dim, counter_dim = 'Z'-'A'+1 , max_freq=0;
int counter['z' - 'A' + 1] = {0};
char mf_letter;   

    
    printf("Inserisci la stringa: \n");
    fgets(str, 80, stdin);
    
    str_dim = strlen(str);
    
for(i = 0; i < str_dim; i++){

counter[(int)(str[i] - 'A')]++;
printf("counter = %d\n", counter[i]);
}

for(i = 0; i < counter_dim; i++){
    
if(counter[i] >= max_freq){

max_freq = counter[i];

printf("max freq = %d\n", max_freq);
    
mf_letter = (char)(i + 'A');

}
}
printf("%s", mf_letter);
num_freq[i] = max_freq;

return mf_letter;
printf("La lettera: %s e' stata ripetuta: %d", mf_letter, num_freq);
}
    



int main (){
    
    char str[80];
    int num_freq[8+0];
    char mf_letter;
    

    

    mostFrequentLetter(str,  num_freq);
    
    printf("La lettera: %s e' stata ripetuta: %d", mf_letter, num_freq);

    
    
    return 0;
}
 

M1n021

Utente Attivo
159
73
Ciao, ad un'occhiata veloce ti consiglio, al fine di rispettare la traccia dell'esercizio, di rifarti alla seguente impostazione:

C:
#include <stdio.h>

char mostFrequentLetter(char *str, int *num_freq)
{
    char c = '\0';
    *num_freq = 0;
    if(str)
    {
        ...
    }
    return c;
}

int main()
{
    char *s = "BLABLABLAAAABLAAAAAAAA";
    int n;
    char c = mostFrequentLetter(s, &n);
    printf("Il carattere piu' frequente e' %c e si ripete %d volte\n", c, n);
    return 0;
}

Inoltre la funzione mostFrequentLetter() non deve leggere o stampare nulla, ma limitarsi a fare quello che dice la traccia.
 
  • Mi piace
Reazioni: Andretti60

bigendian

Utente Attivo
775
442
OS
Linux
Buona norma, abituarsi ai controlli, prima di efettuare "str - 'A'", controllare la lettera che processi, se uno immette un numero o un { , crasha tutto.
 
  • Mi piace
Reazioni: Andretti60

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili