Dato che parlare è inutile e visto le confidenze che hai scritto in privato e di cui per questa volta voglio fidarmi ti posto una soluzione dell'esercizio (non del tutto sicura visto l'uso di gets, ma sei liberissimo di migliorarla dopo averla compresa). Tuttavia pretendo che in questi giorni la studi e chiedi chiarimento per ogni passaggio che non comprendi.
codice:
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
#define BUFF_SIZE 1024
int menu(void) {
int scelta;
do {
puts(
"1) Stampa numero di lettere senza spazi.\n"
"2) Stampa del numero di spazi\n"
"3) Stampa della lettera che si ripete il maggior numero di volte\n"
"4) Stampa della lettera che si ripete il minor numero di volte\n"
"5) Re-inserimento della frase\n"
"6) Stampa della frase tutta maiuscola\n"
"7) Stampa della frase tutta minuscola\n"
"8) Uscita\n"
"Operazione n°: "
);
scanf("%d", &scelta);
} while(scelta<1 || scelta>8);
return scelta;
}
void m1(char *s) {
int nspaces = 0;
int i;
for(i = 0; i < strlen(s); ++i)
if(!isspace(s[i]))
++nspaces;
printf("Lettere: %d\n", nspaces);
}
void m2(char *s) {
int spaces = 0;
int i;
for(i = 0; i < strlen(s); ++i)
if(isspace(s[i]))
++spaces;
printf("Spazi: %d\n", spaces);
}
void string_to_upper(char *s) {
int i;
for(i = 0; i < strlen(s); ++i)
s[i] = toupper(s[i]);
}
void string_to_lower(char *s) {
int i;
for(i = 0; i < strlen(s); ++i)
s[i] = tolower(s[i]);
}
void m3(char *s) {
char tmp[BUFF_SIZE];
strcpy(tmp, s);
string_to_upper(tmp);
int table['Z'-'A'+1];
int i;
for(i = 0; i < 'Z'-'A'+1; ++i)
table[i] = 0;
for(i = 0; i < strlen(tmp); ++i)
++table[(tmp[i])-'A'];
int max = table[0];
int i_max = 0;
for(i = 1; i < 'Z'-'A'+1; ++i)
if(table[i] > max){
max = table[i];
i_max = i;
}
printf("Lettera più frequente: %c\n", i_max+'A');
}
void m4(char *s) {
char tmp[BUFF_SIZE];
strcpy(tmp, s);
string_to_upper(tmp);
int table['Z'-'A'+1];
int i;
for(i = 0; i < 'Z'-'A'+1; ++i)
table[i] = 0;
for(i = 0; i < strlen(tmp); ++i)
++table[(tmp[i])-'A'];
int min = table[0];
int i_min = 0;
for(i = 1; i < 'Z'-'A'+1; ++i)
if((table[i] != 0 && table[i] < min) || min == 0){
min = table[i];
i_min = i;
}
printf("Lettera meno frequente: %c\n", i_min+'A');
}
void m5(char *s) {
bool repeat;
int i;
do {
puts("Inserisci una frase composta di soli caratteri alfanumerici e spazi:");
repeat = false;
gets(s);
for(i = 0; i < strlen(s); ++i)
if(!(isalpha(s[i]) || isspace(s[i]))) {
repeat = true;
break;
}
} while(repeat);
}
void m6(char *s) {
char tmp[BUFF_SIZE];
strcpy(tmp, s);
string_to_upper(tmp);
printf("Frase in maiuscolo: %s\n", tmp);
}
void m7(char *s) {
char tmp[BUFF_SIZE];
strcpy(tmp, s);
string_to_lower(tmp);
printf("Frase in minuscolo: %s\n", tmp);
}
int main(void) {
char s[BUFF_SIZE];
bool quit = false;
m5(s);
while(!quit)
switch(menu()) {
case 1: m1(s); break;
case 2: m2(s); break;
case 3: m3(s); break;
case 4: m4(s); break;
case 5: m5(s); break;
case 6: m6(s); break;
case 7: m7(s); break;
case 8: quit = true; break;
}
return 0;
}