[C] occorrenze maiuscole e minuscole in una matrice

Alessandro01101
Salve ragazzi ho problemi a svolgere un programma vi posto il titolo:
Creare un programma che, letti tutti i caratteri in ingresso fino alla fine del file, memorizzi in
una matrice con due righe e 26 colonne le occorrenze delle lettere digitate. La prima riga sia
utilizzata per memorizzare le occorrenze delle lettere minuscole, la seconda riga per le lettere
maiuscole. Si stampi sullo schermo il contenuto della matrice.

Avete qualche idea su come svolgerlo?
io l'avevo fatto così ma penso sia del tutto sbagliato anche se l'algoritmo non dovrebbe essere malaccio.
questo è il mio programma:

#include <stdio.h>
#define righe 2
#define colonne 26
main()
{
      char c,m[righe][colonne];
      int i,j;
      while((c=getchar())!=EOF)
      {
                               if(c>='a' && c<='z')
                               {
                               for(j=0;j<26;j++)
                               m[0][j]=c;
                               }
                               else if(c>='A' && c<='Z')
                               {
                                    for(j=0;j<26;j++)
                                    m[1][j]=c;
                                    }
                                    }
                                    for(i=0;i<2;i++){
                                                     for(j=0;j<26;j++)
                                                     {
                                                                      printf("%c ",m[i][j]);
                                                                      }
                                                                      printf("\n");
                                                                      }
                                                                      
                                                                      getchar();
                                                                      }

vi ringrazio in anticipo per l'aiuto;)

Risposte
apatriarca
NdM: Ti ho modificato il codice in modo da mostrare il codice formattato nel riquadro. Semplifica la copiatura del codice per provarlo e, se fosse formattato in modo un po' più decente, la sua lettura e comprensione. Per farlo devi inserire il codice nel tag code.

vict85
Ma se devi contare le occorrenze, vuol dire che se c = 'a' allora devi aumentare m[0][0] di 1 (prima ovviamente devi azzerare tutta la matrice). In questo senso m avrebbe senso fosse un array multidimensionale di interi. Per fare un altro esempio se c='J' allora devi aumentare di 1 il valore di m[1][9]. Non so se mi sono spiegato. Per i test maiuscolo e minuscolo puoi anche usare isupper e islower definiti in ctype.h

Alessandro01101
non sono comandi che abbiamo studiato isupper e islower... comunque non potresti scrivere direttamente un codice fatto da te... perché tramite gli esempi capisco meglio... Chiaramente se non ti è troppo di disturbo ;)

apatriarca
Non è questione di essere troppo di disturbo.. Fornirti la soluzione sarebbe contro il regolamento.

Quello che posso dirti è che la matrice descritta nell'esercizio deve contenere il numero di occorrenze per ogni lettera e quindi essere tendenzialmente di tipo diverso. Per esempio potresti usare qualcosa del tipo:
int occorrenze[2][26] = {0};

Quell'uguale alla fine seguito dalle parentesi e lo zero dentro servono per inizializzare tutto l'array a zero. Nota che vale solo per zero scritto così.. Se scrivi = {1} l'array NON viene inizializzato tutto a 1, ma a zero tranne un singolo elemento che viene inizializzato a 1.. È molto importante comunque che la matrice venga inizializzata a zero in questo caso per cui inizializza la matrice come ho scritto oppure usa dei cicli (o la funzione memset).. Il tipo può invece volendo essere cambiato in unsigned o qualcos'altro. char ha poco senso invece.

Data una qualsiasi lettera c, scrivendo c - 'A' (se c è maiuscola) oppure c - 'a' (se c è minuscola) si può ottenere l'indice corrispondente all'interno di quell'array. Per esempio: 'A' - 'A' = 0, 'C' - 'A' = 2, 'z' - 'a' = 25.. Questo è l'indice da usare per accedere all'array scritto sopra..

Alessandro01101
poco prima di vedere il tuo messaggio mi sono reso conto leggendo il testo di averlo interpretato malissimo XD in ogni caso ora che compreso il testo riesco sicuramente a capire meglio i tuoi consigli... grazie mille ;) appena ho tempo mi ci rimetto ;)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.