@Scara95 in effetti la tua soluzione è ottimale, ma a me non sarebbe mai venuta in mente

Se non ti dispiace, commento il codice, molto chiaro per un professionista, ma forse difficile da capire per uno alle prime armi.

==============================
Premessa, i caratteri che si usano nelle condizioni e espressioni, devono essere considerati come il codice ascii del carattere e non il carattere stesso.


codice:
for(i=0; i < n;++i){ //Scorre la frase carattere per carattere 
  if(frase[i]>='a'&& frase[i]<='z'){// controlla se il carattere è una lettera minuscola
                                          
    ++lettere[frase[i]-'a']; // incrementa array lettere nella posizione corrispondente 
                             // esempio: frase[i]='b'  diviene  'b'-'a' ossia  98-97= posizione uno
  }
}