Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    [c] contare il numero di lettere

    Chiedo aiuto a voi programmatori esperti, ho un esercizio in C che non riesco proprio ad impostare.
    Mi viene chiesto di fare un programma che conti il numero di lettere in una stringa... ovvero.....

    se la stringa è "Ciao a tutti"... il programma stampa "C=1" "I=2" "A=2" "T=3" etc.

    come posso cominciare?'? qualcuno ha programmi simili e mi può postare il sorgente?

  2. #2
    Potresti creare un array di lunghezza 21 (che sono le lettere dell'alfabeto) e lo inizializzi con tutti 0.
    Scandisci la stringa e per ogni carattere letto, incrementi di 1 l'elemento dell'array con l'indice che corrisponde al numero della lettera letta dalla stringa.

    Oppure, soluzione più brutta, fai uno switch.


  3. #3
    in che senso incrementare di uno l'indice?

  4. #4
    Rileggi attentamente la frase che ho scritto...non ho detto di incrementare l'indice (che non ha senso) ma di incrementare il valore dell'elemento dell'array di indice corrispondente alla lettera dell'alfabeto.

    Esempio:
    se la lettera della stringa che hai letto è la A, fai:
    a[0] += 1; // si parte da 0 come ogni buon informatico

    Ovviamente non è che fai una serie infinita di if, ma utilizzo un ciclo

  5. #5
    grazie ora un'idea me la sono fatta... non è che però avresti tipo un sorgente su cui posso aiutarmi?

  6. #6
    va bhè...te lo scrivo...

    alcune cose evito di scrivertele per non perdere troppo tempo
    codice:
    char c, lett[22]; // lett[] è un array contenente tutte le lettere dell'alfabeto
    int presenze[21];
    
    n=strlen(s);
    for (i=0; i<n; i++)
       for(j=0; j<21; j++)
          if(s[i]==lett[j])
             presenze[j]+=1;
    
    // Per stampare le info
    for(i=0; i<21; i++)
       printf("%c = %d\n", lett[i], presenze[i]);

  7. #7

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da devil89
    va bhè...te lo scrivo...

    alcune cose evito di scrivertele per non perdere troppo tempo
    codice:
    char c, lett[22]; // lett[] è un array contenente tutte le lettere dell'alfabeto
    int presenze[21];
    
    n=strlen(s);
    for (i=0; i<n; i++)
       for(j=0; j<21; j++)
          if(s[i]==lett[j])
             presenze[j]+=1;
    
    // Per stampare le info
    for(i=0; i<21; i++)
       printf("%c = %d\n", lett[i], presenze[i]);
    Con un solo ciclo for, un array in meno e nessun confronto ( ):
    codice:
    int presenze[21];
    
    n=strlen(s);
    for (i=0; i<n; i++)
       presenze[s[i]-65] += 1;
    
    // Per stampare le info
    for(i=0; i<21; i++)
       printf("%c = %d\n",(i+65), presenze[i]);
    Attenzione che, anche nell'esempio di devil89, si presuppone che la stringa sia normalizzata.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    per i profani come me... cosa significa normalizzare la stringa?

  10. #10
    Propongo un'altra modifica: usare un array di 26 in quanto esistono anche parole con k,j,y,w,x.

    codice:
    int presenze[26] = {0};
    
    n=strlen(s);
    for (i=0; i<n; i++)
       presenze[s[i]-65]++;
    
    // Per stampare le info
    for(i=0; i<26; i++)
       printf("%c = %d\n",(i+65), presenze[i]);

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 © 2025 vBulletin Solutions, Inc. All rights reserved.