08. Caratteri e stringhe

Esercizio 1

Prerequisiti: scanf() o getchar() 

Scrivere un programma che effettua le seguenti operazioni:

Occorre distinguere tra: lettere minuscole, lettere maiuscole, cifre numerica, punteggiatura (virgola, punto e virgola, punto, due punti, punto esclamativo e punto interrogativo) e carattere generico.


Esempi di esecuzione 1: 

Inserire un carattere: N

Il carattere inserito e' N ed e' una lettera maiuscola


Esempi di esecuzione 2: 

Inserire un carattere: #

Il carattere inserito e' # ed e' un carattere generico


Soluzione

────══════♦☆♦══════────

Esercizio 2

Prerequisiti: scanf() o getchar() 

Scrivere un programma che effettua le seguenti operazioni:


Esempio di esecuzione 1: 

Inserire un carattere: N

n


Esempio di esecuzione 2

Inserire un carattere: )

)

────══════♦☆♦══════────

Esercizio 3

Prerequisiti: scanf() o getchar() 

Scrivere un programma che effettua le seguenti operazioni:


Esempio di esecuzione 1: 

Inserire un carattere: A

Il carattere inserito e' una vocale


Esempio di esecuzione 2: 

Inserire un carattere: z

Il carattere inserito non e' una vocale

────══════♦☆♦══════────

Esercizio 4

Prerequisiti: scanf() o getchar(), coda di input, while

Scrivere un programma che chiede all'utente di inserire un testo terminato con <INVIO> ed effettua il conteggio delle vocali.

Al termine stampa, per ciascuna vocale, il numero di occorrenze.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Sempre caro mi fu quest'ermo colle, e questa siepe

Vacale a: 2

Vocale e: 9

Vocale i: 2

Vocale o: 3

Vocale u: 3

Suggerimento

Per effettuare la lettura del testo, fino al carattere <INVIO> (corrispondente a '\n'), avvalersi del seguente stralcio di codice:


do {

     c=getchar();

     ....

} while (c!='\n');



soluzione

────══════♦☆♦══════────

Esercizio 5

Prerequisiti: scanf() o getchar(), coda di input, while, array di int

Scrivere un programma che chiede all'utente di inserire un testo terminato con <INVIO> ed effettua il conteggio di tutti i caratteri inseriti. Al termine stampa il conteggio relativo alle lettere minuscole.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Sempre caro mi fu quest'ermo colle, e questa siepe

Lettera a: 2

Lettera b: 0

Lettera c: 2

Lettera d: 0

Lettera e: 9

...

Suggerimento

Per effettuare la lettura del testo, fino al carattere <INVIO> (corrispondente a '\n'), avvalersi del seguente stralcio di codice:


do {

     c=getchar();

     ....

} while (c!='\n');


Soluzione

────══════♦☆♦══════────

Esercizio 6

Prerequisiti: scanf() o getchar(), coda di input, while

Scrivere un programma che chiede all'utente di inserire un testo terminato con <INVIO> e stampa nuovamente il testo eliminando i caratteri di punteggiatura.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Cosa dici? No, non puo' essere!

Cosa dici No non puo' essere

────══════♦☆♦══════────

Esercizio 7

Prerequisiti: scanf() o getchar(), coda di input, while

Scrivere un programma che chiede all'utente di inserire un testo terminato con <INVIO> e stampa nuovamente il testo delimitandolo con le parentesi angolari e sostituendo i caratteri di punteggiatura con il trattino "-".

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Cosa dici? No, non puo' essere!

<Cosa dici- No- non puo' essere->


Soluzione

────══════♦☆♦══════────

Esercizio 8

Prerequisiti: scanf() o getchar(), coda di input, while

Scrivere un programma che chiede all'utente di inserire un testo terminato con <INVIO> e stampa nuovamente il testo delimitandolo con le parentesi angolari, stampando al posto dei caratteri non alfabetici (cioè diversi dalle lettere a-z minuscole o maiuscole) il carattere asterisco.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Le 4 operazioni: + - × : !

<Le***operazioni******×****>

────══════♦☆♦══════────

Esercizio 9

Prerequisiti: scanf() o getchar(), coda di input, while, array di char

Scrivere un programma che chiede all'utente di inserire un testo (max 100 caratteri) terminato con <INVIO> e stampa  il testo precedentemente inserito ma al contrario.

Esempio di esecuzione:

Inserire un testo libero terminato con <INVIO>:

abcdefghi

ihgfedcba


Soluzione

────══════♦☆♦══════────


Esercizio 10

Prerequisiti: scanf() o getchar(), coda di input, while, array di char

Basandosi su un array di caratteri, scrivere un programma che chiede all'utente di inserire un testo (max 100 caratteri) terminato con <INVIO> e stampa  il testo precedentemente inserito ma tutto in maiuscolo.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Ciao come Stai? Bene grazie.

CIAO COME STAI? BENE GRAZIE.

────══════♦☆♦══════────


Esercizio 11

Prerequisiti: scanf() o getchar(), coda di input, while, array di char

Basandosi su un array di caratteri, scrivere un programma che chiede all'utente di inserire un testo (max 100 caratteri) terminato con <INVIO> e stampa  il testo precedentemente inserito eliminando gli spazi inseriti dopo ogni punto (.).

Esempio di esecuzione:

Inserire un testo libero terminato con <INVIO>:

Ei fu. Siccome immobile.

Ei fu.Siccome immobile.


Soluzione

────══════♦☆♦══════────

Esercizio 12

Prerequisiti: scanf() o getchar(), coda di input, while, array di char

Scrivere un programma che chiede all'utente di inserire un testo (max 100 caratteri) terminato con <INVIO> e ricerca all'interno del testo la sequenza abc e la sostituisce con ***.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Questo e' un testo con abc e altre lettere.

Questo e' un testo con *** e altre lettere.

────══════♦☆♦══════────

Esercizio 13

Prerequisiti: scanf() o getchar(), coda di input, while, array di char

Scrivere un programma che chiede all'utente di inserire un testo (max 100 caratteri) terminato con <INVIO> e ricerca all'interno del testo una sequenza composta da una lettere maiuscola seguita da una minuscola. In questo caso, prima di stampare la lettera maiuscola, introduce un <INVIO> per portare il testo a capo.

Esempio di esecuzione:


Inserire un testo libero terminato con <INVIO>:

Il mio cane si chiama Lara ed E' un Golden Retriever.

Il mio cane si chiama 

Lara ed E' un 

Golden 

Retriever.

────══════♦☆♦══════────

Esercizio 14

Prerequisiti: scanf() o getchar(), coda di input, while, array di char, funzioni

Implementare la funzione confronto() di seguito descritta:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.


Soluzione

────══════♦☆♦══════────

Esercizio 15

Prerequisiti: while, array di char, funzioni

Implementare la funzione replica() di seguito descritta:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.

────══════♦☆♦══════────

Esercizio 16

Prerequisiti: while, array di char, funzioni

Implementare la funzione fill() di seguito descritta:

Esempio di elaborazione:

 Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.

────══════♦☆♦══════────

Esercizio 17

Prerequisiti: while, array di char, funzioni

Implementare la funzione replica() di seguito descritta:

Esempio di elaborazione:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.


Soluzione

────══════♦☆♦══════────

Esercizio 18

Prerequisiti: while, array di char, funzioni

Implementare la funzione numero() di seguito descritta:

Esempio di elaborazione:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.


Soluzione

────══════♦☆♦══════────

Esercizio 19

Prerequisiti: scanf() o getchar(), coda di input, array di char, funzioni

Implementare la funzione find() di seguito descritta:

Esempio di elaborazione:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.


Soluzione

────══════♦☆♦══════────

Esercizio 20

Prerequisiti: scanf() o getchar(), coda di input, array di char, funzioni

Implementare la funzione maiuscolo() di seguito descritta:

Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.

────══════♦☆♦══════────

Esercizio 21

Prerequisiti: stringhe, scanf(), strcmp()

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma riporta il numero di parole inserite (incluso FINE).

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

cane gatto elefante Cerbiatto anatra usignolo FINE


Il numero di parole inserite e' 7


Soluzione

────══════♦☆♦══════────

Esercizio 22

Prerequisiti: stringhe, scanf(), strcmp()

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma conta quante volte è stata inserita la parola BENE.

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

Tutto BENE quel che finisce BENE FINE


La parola BENE e' stata inserita 2 volte


────══════♦☆♦══════────

Esercizio 23

Prerequisiti: stringhe, scanf(), strlen(), strcmp(), strcpy()

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma riporta la prima parola in ordine alfabetico e la parola più lunga (includendo la parola FINE).

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

cane gatto Elefante cerbiatto anatra Usignolo FINE


La prima parola in ordina alfabetico e' <Elefante>

La parola parola piu' lunga e' <cerbiatto>



Nota:

In ordine alfabetico tutte le maiuscole precedono le minuscole.


Soluzione


────══════♦☆♦══════────

Esercizio 24

Prerequisiti: stringhe, scanf(), strlen(), strcmp(), strcpy()

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma stampa la prima parola in ordine alfabetico e la sua lunghezza (includendo la parola FINE).

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

cane gatto Elefante cerbiatto anatra Usignolo FINE


La prima parola in ordina alfabetico e' <Elefante> e la sua lunghezza è 8



Nota:

In ordine alfabetico tutte le maiuscole precedono le minuscole.



────══════♦☆♦══════────

Esercizio 25

Prerequisiti: stringhe, scanf(), strlen(), strcmp(), strcpy()

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma verifica se la successione di parole rispetta l'ordine alfabetico, senza considerare la parola FINE.

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

cane gatto Elefante cerbiatto anatra Usignolo FINE


La successione di parole inserite non rispetta l'ordina alfabetico



Nota:

In ordine alfabetico tutte le maiuscole precedono le minuscole.


────══════♦☆♦══════────

Esercizio 26

Prerequisiti: stringhe, scanf(), strlen(), strcmp(), funzioni

Scrivere un programma che chiede all'utente di inserire una successione di parole separate da spazio e di terminare con  <INVIO>. L'ultima parola inserita deve essere FINE. 

Il programma stampa tutte le parole inserite dall'utente invertendo maiuscole e minuscole.

Esempio di esecuzione:

Inserire una successione di parole separate da spazio e terminare con FINE<INVIO>

cane gatto elefante Cerbiatto ANATRA usignolo FINE

CANE GATTO ELEFANTE cERBIATTO anatra USIGNOLO fine


Soluzione

────══════♦☆♦══════────

Esercizio 27

Prerequisiti: stringhe, scanf(), strlen(), funzioni

La funzione confronto() ha il seguente prototipo

int confronto(char a[], char b[]);

Essa effettua il confronto tra le stringhe a, b e restituisce 1 se le due stringhe risultano uguali senza differenziare tra maiuscolo e minuscolo mentre restituisce 0 negli altri casi. Ad esempio confronto("Cane", "caNE")  restituisce 1 mentre confronto("canino", "cani") restituisce 0.

Implementare la funzione e richiamarla tramite un main() che acquisisce due parole da tastiera.

Esempio di esecuzione:

Inserire due parole

Cane caNE 


Le parole inserite sono uguali


Nota:

In ambiente Windows la funzione di libreria stricmp() e su Linux la funzione strcasecmp()effettuano il confronto senza differenziare tra maiuscole e minuscole. Tali funzioni di libreria non sono standard e pertanto non sono disponibili in tutti gli ambienti.

Per svolgere l'esercizio non utilizzare tali funzioni.