Stringhe
Indice
- Definizione
- Modifica carattere
- Leggo una riga carattere per carattere
- Leggo stringa con scanf
- Leggo stringa con fgets
- Funzioni valutazione caratteri
- Funzioni conversione maiuscole - minuscole
- Calcolo lunghezza stringa
- Iterazione su tutto il contenuto di una stringa
- Copia di una stringa
- Concatenazione di stringhe
- Confronto di stringhe
- Ricerca in stringhe
- Input da stringa
- Output su stringa
Definizione
char s[30]; char stringa[] = "forza panino"; char stringa2[30] = "Quel ramo del lago di Como";
Modifica carattere
char stringa[] = "forza"; stringa[0] = 'F';
Leggo una riga carattere per carattere
char s[20] = {0}; // stringa inizializzata con 0 char c; int i = 0; while ((c = getchar()) != '\n') { s[i] = c; i++; if (i == 19) break; } s[i] = '\0';
Leggo stringa con scanf
scanf si ferma al primo spazio, inserisce in fondo il terminatore di stringa
char s[50]; scanf("%49s", s);
Leggo stringa con fgets
fgets legge una intera riga, incluso il carattere '\n' che deve essere eventualmente rimosso
#define N 50 char s[N]; fgets(s, N, stdin); s[strlen(s) - 1] = '\0';
Funzioni valutazione caratteri
Per usarle serve #include<ctype.h>
isdigit(c)→ cifra decimaleisalpha(c)→ letteraisalnum(c)→ carattere alfanumericoisxdigit(c)→ cifra esadecimaleislower(c)→ lettera minuscolaisupper(c)→ lettera maiuscolaiscntrl(c)→ carattere di controlloisspace(c)→ white space (' ','\t','\n',…)isprint(c)→ char stampabile, incluso lo spazioisgraph(c)→ char stampabile, escluso lo spazioispunct(c)→ stampabile, no spazio, no alfanumerico
char s[] = "Il cielo sopra il porto"; int lettere = 0, spazi = 0; for(int i = 0; s[i] != '\0'; i++) { if (isalpha(s[i])) { lettere++; } if (isspace(s[i])) { spazi++; } } printf("il numero di lettere presenti all'interno della stringa e' %d\n", lettere); printf("il numero di spazi nella stringa e' %d\n", spazi);
Funzioni conversione maiuscole - minuscole
toupper(c)→ converti in maiuscolo - restituisce il carattere convertitotolower(c)→ converti in minuscolo - restituisce il carattere convertito
char s[] = "Il cielo SOPRA il Porto"; char up[100] = {0}; char low[100] = {0}; int lettere = 0, spazi = 0; for(int i = 0; s[i] != '\0'; i++) { up[i] = toupper(s[i]); low[i] = tolower(s[i]); } printf("la stringa tutta maiuscola diviene %s\n", up); printf("la stringa tutta minuscola diviene %s\n", low);
Calcolo lunghezza stringa
Serve #include<string.h>
char s[] = "Il cielo sopra il porto"; int len = strlen(s); printf("la stringa e' lunga %d", len);
Iterazione su tutto il contenuto di una stringa
char s[] = "Il cielo sopra il porto"; int i; for(i = 0; i < strlen(s); i++) { // posso usare s[i] per risolvere il problema printf("%c\n", s[i]); }
Copia di una stringa
char sorgente[] = "Do Androids Dream of Electric Sheep?"; char destinazione[100]; strcpy(destinazione, sorgente); printf("%s\n", destinazione);
Concatenazione di stringhe
char s1[50] = "Uno,due,"; char s2[] = "tre,quattro"; strcat(s1, s2); // dopo questa operazione s1 contiene "Uno,due,tre,quattro" printf("%s\n", s1);
Confronto di stringhe
Attenzione al fatto che le lettere maiuscole vengono prima delle minuscole dato che vengono valutate in base alla loro codifica ASCII.
char s1[] = "ciao"; char s2[5] = "ciao"; if (strcmp(s1, s2) == 0) { printf("Le due stringhe sono uguali"); } if (strcmp(s1, s2) < 0) { printf("La prima stringa viene prima in ordine alfabetico"); } if (strcmp(s1, s2) > 0) { printf("La seconda stringa viene prima in ordine alfabetico"); }
Ricerca in stringhe
Ricerca carattere in stringa
La funzione strchr(str, carattere) cerca carattere in str restituisce NULL se non lo trova
Esempio: controllo se un carattere e' una vocale:
char s[] = "CIAONE come va?"; for (i = 0; i < strlen(s); i++){ // se sono solo lettere if (isalpha(s[i])) { if (strchr("AEIOUaeiou", s[i]) != NULL){ // vocale } else { // consonante } } }
Ricerca stringa in stringa
strstr(str1, str2) cerca str2 in str1, dà NULL se non la trova
char s[] = "CIAONE come va?"; char parola[] = "CIAO"; if (strstr(s, parola) != NULL) printf("Trovata parola %s nella stringa s", parola);
Input da stringa
La funzione sscanf(stringa, formato, variabili); è identica alla scanf, ma preleva i caratteri da stringa invece che dalla tastiera
Esempio:
se str contiene "12 ciao 23.2", la funzione:
int a; float b; char s[10]; sscanf(str, "%d%s%f", &a, s, &b);
legge e assegna: 12 ad a, "ciao" alla stringa s, 23.2 al float b
Output su stringa
sprintf(stringa, formato, variabili);
identica alla printf, ma “scrive” in stringa i caratteri che printf visualizzerebbe su schermo, aggiungendo il terminatore finale.