Stringhe in linguaggio C


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();