Stringhe

Indice

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 decimale
  • isalpha(c) → lettera
  • isalnum(c) → carattere alfanumerico
  • isxdigit(c) → cifra esadecimale
  • islower(c) → lettera minuscola
  • isupper(c) → lettera maiuscola
  • iscntrl(c) → carattere di controllo
  • isspace(c) → white space (' ','\t','\n',…)
  • isprint(c) → char stampabile, incluso lo spazio
  • isgraph(c) → char stampabile, escluso lo spazio
  • ispunct(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 convertito
  • tolower(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.

Validate