/* =============================================================== */ /* CORSO DI PROGRAMMAZIONE IN C (C89) */ /* Claudio Fornaro */ /* Ver. 3 - 2021 */ /* 09-Stringhe_Soluzioni.txt */ /* =============================================================== */ /* =============================================================== */ /* 1 */ /* =============================================================== */ #include #include #define MAXSTR 80 int main() { char a[MAXSTR], b[MAXSTR]; printf("Stringa 1? "); gets(a); printf("Stringa 2? "); gets(b); if (strlen(a) >= strlen(b)) puts(a); else puts(b); return 0; } /* =============================================================== */ /* 2 */ /* =============================================================== */ #include #include #define MAXSTR 80 int main() { char a[MAXSTR], b[MAXSTR]; printf("Stringa 1? "); gets(a); printf("Stringa 2? "); gets(b); if (strcmp(a,b) >=0 ) puts(a); else puts(b); return 0; } /* =============================================================== */ /* 3 */ /* =============================================================== */ #include #define MAXSTR 80 int main() { char a[MAXSTR]; int cont; printf("Stringa? "); gets(a); cont=0; while (a[cont] != '\0') cont++; printf("%d\n", cont); return 0; } /* =============================================================== */ /* 4 */ /* =============================================================== */ #include #include #include #define MAXSTR 80 int main() { char a[MAXSTR]; int i, l; printf("Stringa? "); gets(a); l=(int)strlen(a); for (i=0; i #define MAXSTR 80 int main() { char a[MAXSTR]; int i, trovato=0; printf("Stringa? "); gets(a); for (i=0; i<10 && i Errore frequente: for (i=0; i<10 && a[i] != '\0'; i++) if (a[i] == 'A') printf("Trovato\n"); else printf("Non trovato\n"); Per ciascuno dei caratteri di a[] produce o la scritta "Trovato" o "Non trovato", mentre deve produrre una sola scritta al termine. */ /* Altra soluzione */ #include #include #define MAXSTR 80 int main() { char a[MAXSTR], b[11]={'\0'}; int i; printf("Stringa? "); gets(a); strncpy(b, a, 10) if (strchr(b, 'A') != NULL) printf("Trovato\n"); else printf("Non trovato\n"); return 0; } /* Nota b[] deve essere inizializzato a tutti \0 perche' la strncpy copia solo i caratteri di a[], ma non aggiunge il \0 finale */ /* =============================================================== */ /* 6 */ /* =============================================================== */ #include #include #include #define MAXSTR 80 int main() { char a[MAXSTR]; int i, L, cifre=0; printf("Introduci la stringa:"); gets(a); L=(int)strlen(a); for (i=0; i #include #include #define MAXSTR 80 int main() { char a[MAXSTR]; int i, L, maius=0, minus=0, cifre=0; printf("Introduci la stringa:"); gets(a); L=(int)strlen(a); for (i=0; i #include #define MAXSTR 80 int main() { char a[MAXSTR], b[MAXSTR], c[MAXSTR]; int i, j, cont=0; int la, lb; printf("Introduci la prima stringa:"); gets(a); printf("Introduci la seconda stringa:"); gets(b); la = (int)strlen(a); lb = (int)strlen(b); if (la #include #include #define MAXSTR 80 int main() { char a[MAXSTR], b[MAXSTR]; int i, L; printf("Introduci la stringa:"); gets(a); L=(int)strlen(a); for (i=0; i #include #include #define MAXSTR 80 int main() { char a[MAXSTR]; int i, L, palin; printf("Introduci la stringa:"); gets(a); L=(int)strlen(a); for (i=0; i #include #define MAXSTR 80 int main() { char a[MAXSTR]; int i, L, uguali, dispari; printf("Introduci la stringa:"); gets(a); L=(int)strlen(a); uguali=1; dispari = L % 2; for (i=0; i #include #include #define N 128 int main() { char frase[N+1]; /* per contenere anche lo \0 */ int i; int numparole; int numcaratteri=0; printf("Inserisci la frase: "); gets(frase); numparole=0; numcaratteri=0; for (i=0; frase[i]!='\0'; i++) /* vedi nota */ if (isalpha(frase[i])) { numcaratteri++; if (!isalpha(frase[i+1])) numparole++; } printf("Numero parole: %d lunghezza media=%.2f\n", numparole, (double)numcaratteri/numparole); return 0; } /* Note Una parola ha la caratteristica di essere composta da caratteri solo alfabetici ed essere preceduta e seguita da almeno un carattere non alfabetico, tranne la prima parola che non e' preceduta da nulla e dall'ultima che non e' seguita da nulla. In realta' in C dopo l'ultima parola c'e' sempre un carattere non alfabetico, il \0; quindi dei due modi il secondo e' certamente piu' adatto a essere realizzato (dato che davanti al primo carattere della prima parola non c'e' nulla). Quindi frase[i+1] e' corretto anche quando i è arrivato all'ultimo carattere in quanto il \0 fa comunque parte della stringa. Il ciclo: for (i=0; i<(int)strlen(frase); i++) avrebbe funzionato senza problemi. Qui si e' voluto evitare di caricare la libreria di gestione delle stringhe per la sola funzione strlen. Inoltre il programma e' piu' veloce non essendoci una chiamata a funzione a ogni iterazione. */