Accedi

Lettere dell'alfabeto

PROBLEMA

Scrivere un programma che letta da tastiera una stringa di caratteri per ognuna delle lettere dell'alfabeto stampa a video il numero delle volte che la lettera compare nella stringa


CODICE SORGENTE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CARATTERI 10000+1
#define NUMERO_LETTERE 26+1
void banner_menu();
void banner_menu(void){
 system("cls");
 printf("1. Inserisci la frase\n");
 printf("2. Visualizza le lettere della frase\n");
 printf("3. Esci\n");
}

int main(int argc, char *argv[]){
 //sezione dichiarativa
 char lettera_simbolo[NUMERO_LETTERE]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\0'}; //array con il simbolo della lettera
 int lettera[NUMERO_LETTERE]={0}; //array per il nuvero di volte che compaiono le lettere
 int i, conferma=0, caratteri_speciali=0; //i=indice; conferma=per verificare che una frase è stata inserita; caratteri_speciali=mantiene il conteggio di essi
 char frase[CARATTERI]; //contiene la frase inserita
 char scelta; //scelta del menu
 //inizio menu 
 do{
  banner_menu();
  printf(">");
  scelta=getch();
  switch (scelta){
   case '1': //Inserimento frase
    system("cls");
    printf("Inserisci la frase\n>");
    gets(frase);
    conferma=1;
    for (i=0;i<strlen(frase);i++){ //controlla delle lettere
     switch (frase[i]){
      case 'a': case 'A':
       lettera[1-1]++;
       break;
      case 'b': case 'B':
       lettera[2-1]++;
       break;
      case 'c': case 'C':
       lettera[3-1]++;
       break;
      case 'd': case 'D':
       lettera[4-1]++;
       break;
      case 'e': case 'E':
       lettera[5-1]++;
       break;
      case 'f': case 'F':
       lettera[6-1]++;
       break;
      case 'g': case 'G':
       lettera[7-1]++;
       break;
      case 'h': case 'H':
       lettera[8-1]++;
       break;
      case 'i': case 'I':
       lettera[9-1]++;
       break;
      case 'j': case 'J':
       lettera[10-1]++;
       break;
      case 'k': case 'K':
       lettera[11-1]++;
       break;
      case 'l': case 'L':
       lettera[12-1]++;
       break;
      case 'm': case 'M':
       lettera[13-1]++;
       break;
      case 'n': case 'N':
       lettera[14-1]++;
       break;
      case 'o': case 'O':
       lettera[15-1]++;
       break;
      case 'p': case 'P':
       lettera[16-1]++;
       break;
      case 'q': case 'Q':
       lettera[17-1]++;
       break;
      case 'r': case 'R':
       lettera[18-1]++;
       break;
      case 's': case 'S':
       lettera[19-1]++;
       break;
      case 't': case 'T':
       lettera[20-1]++;
       break;
      case 'u': case 'U':
       lettera[21-1]++;
       break;
      case 'v': case 'V':
       lettera[22-1]++;
       break;
      case 'w': case 'W':
       lettera[23-1]++;
       break;
      case 'x': case 'X':
       lettera[24-1]++;
       break;
      case 'y': case 'Y':
       lettera[25-1]++;
       break;
      case 'z': case 'Z':
       lettera[26-1]++;
       break;
      default:
       caratteri_speciali++;
     }  
    }
    break;
   case '2': //visulizza risultati
    system("cls");
    if(conferma==1){ //se è presente una frase
     printf("Lettera\t\tPresente\n");
     for (i=0;i<NUMERO_LETTERE-1;i++){
      printf("  %c\t\t   %i\n", lettera_simbolo[i], lettera[i]);
     }
     printf("Caratteri speciali: %i\n", caratteri_speciali);
     printf("Premi un tasto per tornare al menu . . .\n>");
     getch();
    }
    else{ //se non è presente una frase
     for (i=5;i>0;i--){
      system("cls");
      banner_menu();
      printf(">Devi inserire una frase attendi [%i]", i);
      sleep(1);
     }
      
    }
    break;
   case '3': //chiusura programma
    system("cls");
    for (i=0;i<5;i++){
     printf("Grazie di aver utilizzato il programma\n");
     sleep(1);
    }
    break;
   default: //per altri valori
    scelta=1;
  }
 }while(scelta!='3');
 return 0;
}