08. Caratteri e stringhe
Esercizio 1
Prerequisiti: scanf() o getchar()
Scrivere un programma che effettua le seguenti operazioni:
chiede all'utente di inserire un carattere
stampa il carattere ricevuto specificandone la tipologia.
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
────══════♦☆♦══════────
Esercizio 2
Prerequisiti: scanf() o getchar()
Scrivere un programma che effettua le seguenti operazioni:
chiede all'utente di inserire un carattere
se il carattere corrisponde ad una lettera minuscola stampa la corrispondente lettera in maiuscolo
se il carattere corrisponde ad una lettera maiuscola stampa la corrispondente lettera in minuscolo
in tutti gli altri casi stampa lo stesso carattere ricevuto.
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:
chiede all'utente di inserire un carattere
determina se il carattere inserito corrisponde o meno ad una vocale
stampa l'esito.
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');
────══════♦☆♦══════────
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');
────══════♦☆♦══════────
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->
────══════♦☆♦══════────
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
────══════♦☆♦══════────
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.
────══════♦☆♦══════────
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:
prototipo:
int confronto(char arr1[], int dim1, char arr2[], int dim2)
valori di ritorno:
1: le due sequenze hanno pari lunghezza e contengono ordinatamente gli stessi caratteri
0: altrimenti
Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.
────══════♦☆♦══════────
Esercizio 15
Prerequisiti: while, array di char, funzioni
Implementare la funzione replica() di seguito descritta:
prototipo:
void replica(char arr1[], char arr2[], int dim)
elaborazione:
ricopia il contenuto dell'array arr1 nell'array arr2 invertendo l'ordine dei caratteri. In altri termini il primo elemento di arr1 deve essere posizionato nell'ultimo elemento di arr2 ecc.. La dimensione dei due array è la stessa ed è indicata dalla variabile dim.
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:
prototipo:
void fill(char arr[], int dim)
elaborazione:
gli spazi bianchi presenti alla fine del'array arr, di dimensione dim, sono riposizionati all'inizio dell'array spostando a destra gli altri caratteri presenti nell'array.
Esempio di elaborazione:
caratteri inizialmente contenuti in arr (i caratteri significativi sono racchiusi tra parentesi angolari, che non fanno parte dell'array):
<abc def >
caratteri contenuti in arr dopo l'elaborazione (i caratteri significativi sono racchiusi tra parentesi angolari, che non fanno parte dell'array):
< abc def>
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:
prototipo:
int replica(char arr1[], int dim, char arr2[])
elaborazione:
ricopia in arr2 tutti i caratteri presenti in arr1 escludendo le ripetizioni
restituisce il numero di caratteri copiati in arr2
Esempio di elaborazione:
caratteri inizialmente contenuti in arr1 (i caratteri significativi sono racchiusi tra parentesi angolari, che non fanno parte dell'array):
<abbbccb>
caratteri contenuti in arr2 dopo l'elaborazione (i caratteri significativi sono racchiusi tra parentesi angolari, che non fanno parte dell'array):
<abcb>
valore restituito dalla funzione: 4
Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.
────══════♦☆♦══════────
Esercizio 18
Prerequisiti: while, array di char, funzioni
Implementare la funzione numero() di seguito descritta:
prototipo:
int numero(char arr[], int dim)
elaborazione:
l'array arr contiene una sequenza di caratteri corrispondenti a cifre decimali (cioè una sequenza di caratteri scelti tra '0', '1', ..., '9'). Il numero di caratteri presenti in arr è indicato da dim
la funzione restituisce il valore numerico corrispondente.
Esempio di elaborazione:
caratteri inizialmente contenuti in arr (i caratteri significativi sono racchiusi tra parentesi angolari, che non fanno parte dell'array):
<0321>
valore numerico restituito dalla funzione: 321
Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.
────══════♦☆♦══════────
Esercizio 19
Prerequisiti: scanf() o getchar(), coda di input, array di char, funzioni
Implementare la funzione find() di seguito descritta:
prototipo:
int find(char arr1[], int dim1, char arr2[], int dim2)
elaborazione: ricerca la sequenza di caratteri contenuta in arr2 di lunghezza dim2 nell'array arr1, di dimensione dim1
valori di ritorno:
1: la sequenza cercata esiste in arr1
0: la sequenza cercata non esiste in arr1
Esempio di elaborazione:
siano arr1 e arr2 due array contenenti le sequenze racchiuse nelle parentesi angolari (che non fanno parte dell'array)
arr1: <ciao come stai?>
arr2: <come>
la funzione find() ritorna 1 perché la sequenza come è contenuta in arr1.
Scrivere un main() per effettuare il test della funzione, specificando i valori attesi.
────══════♦☆♦══════────
Esercizio 20
Prerequisiti: scanf() o getchar(), coda di input, array di char, funzioni
Implementare la funzione maiuscolo() di seguito descritta:
prototipo:
int maiuscolo(char arr[], int dim)
elaborazione: trasforma i caratteri minuscoli, contenuti nell'array arr di lunghezza dim, in maiuscolo lasciando inalterati gli altri caratteri
valori di ritorno:
numero di caratteri trasformati in maiuscolo.
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
────══════♦☆♦══════────
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.
────══════♦☆♦══════────
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
────══════♦☆♦══════────
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.
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 98. Esercizi
Paragrafo: 08. Caratteri e stringhe
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Introduttivi - 02. Quesiti strutturati - 03. Interpretazione del codice - 04. Diagrammi di flusso - 05. Array - 06. Tipi numerici - 07. Programmazione strutturata - 08. Caratteri e stringhe - 09. File - 10. Numeri casuali - 11. Riepilogativi - 12. Progettazione guidata