Introduzione alle stringhe in linguaggio C
- vedi libro di testo lezione 3 (UDA1)
- vedi slide di riepilogo: https://www.dropbox.com/s/qqkhgfqse1rlam4/Stringhe.pdf?dl=0
Esercizi di base:
1. leggere nome e cognome, correggere le maiuscole e scrivere un saluto con le due stringhe, barcella
2. concatenare il nome e il cognome separati da spazio in una terza stringa, da scrivere, boffelli
3. scrivere un programma che legge una stringa e ne calcola la lunghezza (senza usare strlen), cassotti
4. leggere una parola e sostituire tutte le lettere minuscole in maiuscole, de martino
5. leggere una parola e sostituire la prima e la seconda lettera con il carattere - , nicotra
6. leggere una parola e sostituire tutte le vocali con il carattere - , panzeri
7. leggere una stringa con formato di data americano MM-DD-YYYY e scrivere la data in formato internazionale: DD-MM-YYYY, piccinelli
8. leggere tre stringhe e concatenarle in una da scrivere a video, radici
9. leggere una parola e sostituire le ultime tre lettere con il carattere * , Rossi
10. leggere una parola e contare quanti caratteri 'a' sono contenuti, testa
11. leggere nome e cognome e scrivere un saluto con le due stringhe inserite, mecca
sintesi degli argomenti:
- stringa: sequenza di caratteri con lunghezza FINITA. la stringa vuota ha lunghezza 0.
- ogni carattere della stringa ha una posizione (proprio come l'indice nei vettori)
- una stringa può includere tutti i caratteri ASCII - UNICODE, compresi i caratteri speciali (es. ascii 13 -> a capo)
- una stringa in C/C++ si chiude per convenzione con il carattere speciale '\0'
- le stringhe fisse sono contenute tra i caratteri di doppio apice, es. "inserisci il tuo nome: " oppure " - "
- le stringhe variabili sono contenute in vettori di tipo char, es.
char nome[30];
è la dichiarazione di una stringa di lunghezza 30 (ATT! nella lunghezza compreso il carattere terminatore \0)
- la libreria da includere è <string.h>
- modi equivalenti di dichiarare e definire una stringa:
char parola[] = "ciao!";
char parola[20] = "ciao!";
char parola = {'c', 'i', 'a', 'o', '!'};
char parola[20];
- lettura e scrittura di stringhe da tastiera:
in C:
scanf("%s", parola);
printf("%s", parola);
in C++:
cin >> parola;
cout << parola;
- per copiare una stringa si usa strcpy, es:
strcpy(parola2, parola);
- per aggiungere una stringa ad un'altra (concatenamento) si usa la funzione strcat, es:
strcat(frase, parola1);
strcat(frase, " e ");
strcat(frase, parola2);
- per confrontare due stringhe si usa la funzione strcmp, es:
if (strcmp(parola, parola2) == 0)
printf ("le due parole coincidono");
ex:
#include <stdio.h>
#include <string.h>
main()
{
char stringa1[20], stringa2[20];
int esito;
printf("inserisci la prima stringa: ");
scanf("%s", stringa1);
printf("inserisci la seconda stringa: ");
scanf("%s", stringa2);
esito = strcmp(stringa1, stringa2);
if (esito == 0)
printf("le due stringhe sono uguali");
else if (esito < 0)
printf("%s < %s", stringa1, stringa2);
else
printf("%s > %s", stringa1, stringa2);
}
- per conoscere la lunghezza di una parola si usa la funzione strlen, es:
#include <stdio.h>
#include <string.h>
main() {
char stringa[50];
int lunghezza;
printf("Scrivi una parola: ");
scanf("%s", stringa);
lunghezza = strlen(stringa);
printf("%s è formata da %d caratteri.",stringa, lunghezza);
}
- ogni singolo carattere di una stringa può essere gestito come una singola cella di un vettore, es.
parola[0]='S';
oppure:
parola[0]=toupper(parola[0]); // mette in maiuscolo l'iniziale
meglio, solo se se l'iniziale è minuscola:
if (islower(parola[0])
toupper(parola[0]);
oppure:
parola[12] ='\0'; // concludo la parola dopo 12 caratteri (da 0 a 11)
la libreria <ctype.h> contiene funzioni per gestire i singoli caratteri e controllarne il tipo (isdigit, isalpha, isupper...)
- lettura di un singolo carattere in C:
char c;
c = getchar();