Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di vip
    Registrato dal
    Nov 2003
    Messaggi
    112

    [C] problema per contare lettere

    ciao ragazzi, ho un problema di una variabile char "nome" dovrei stampare a video quante volte si ripete la lettera a,la b, la c,la d ecc... io avevo pensato ad uno switch, ma dovrei scrivere tutto l'alfabeto.. non c'è un modo piu veloce?

    grazie mille
    ciao
    "E d'un tratto capii che il pensare è per gli stupidi, mentre i cervelluti si affidano all'ispirazione.." (Arancia Meccanica)

  2. #2
    bah te la puoi cavare benissimo con un paio di cicli. Ogni carattere ha un corrispondente valore decimale o hex come ti pare.. per scoprire a cosa equivale A o a ti rimando a una tabella ascii (ne trovi a milioni su google.. anzi che dico a miliardi !!) cmq in sostanza devi usare una struttura del tipo:
    for(int lett=valoreA; lett<=valoreA && lett>=valoreZ; lett++)
    { //abbiamo detto per tutte le lettere dell'alfabeto
    for (int i=0; i<strlen(stringaNome); i++)
    { //in sostanza abbiamo detto cicla per tutta la stringa
    if(stringaNome[i]==lett)
    {
    alfabeto[i]++; //dove alfabeto e' un array con un elemento per ogni lettera dell'alfabeto precedentemente inizializzato a 0. In soldoni fa solo da contatore.
    }
    }
    }
    Non l'ho provato cmq e' una cosa abbastanza banale, e' inutile dire che avrai due ricerche da fare perche' i caratteri MAIUSCOLI e minuscoli hanno valori diversi (A!=a)
    Inoltre cosi' facendo hai un array (alfabeto) che fa da contatore, quindi conseguentemente ad alfabeto[0] corrispondono le presenze di A, alfabeto[1] presenze di B, alfabeto[2] presenze di C ect ect ect

  3. #3
    Puoi limitare i cicli ad uno solo usando le funzioni toupper o tolower .Saluti

  4. #4
    si vero, pero' se gli serve fare distinzione tra maiuscoli e minuscoli ? :P

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    tenendo conto che le lettere ASCI vanno da 65(A) a 90(Z) e le minuscole si creano aggiungendo 32 97(a) 122(z).
    Puoi fare un ciclo for che prenda lettera per lettera della parola e faccia la differenza per sapere se è la prima, la terza, quindi ecc.. lettera dell'alfabeto, es:

    tutto

    116 117 116 116 111

    lettere[25-(122-116)]++;

    generalizzando:

    codice:
    per ogni lettera prendi l'ASCI
    ottieni l'indice dell'array con:
    NumeroLettereAlfabeto-(MaxAsci-Asci)
    Incrementa quell'indice
    Infatti 25-(122-116) fa 19, 97 + 19 fa 116, quindi tu per stampare la frequenza farai:

    (char)(97 + i) compare lettere[i] volte

    o simile, se si pensa un attimo si riesce anche a gestire la differenza maiuscole e minuscole.

    Sempre l'array inizializzato a 0 ecc...

    dimenticavo... 1200 posts


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Piccolà curiosità che mi è venuta mentre leggevo il tread: Per trovare il corrispettivo ascii di un carattere c'è la funzione toascii() in ctype.h vero?

  7. #7
    che io sappia basta castare ad intero il carattere di cui vuoi sapere il codice

    se fai

    codice:
    char c = 'r';
    printf("codice: %i, carattere: %c",c,c);
    ti stampa il codice ascii e il carattere...con un semplice ciclo ti recuperi tutta la tabella...

    codice:
    int i;
    for(i=0;i<256;i++)
      printf("codice: %i, carattere: %c",i,i);
    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.