Lezione 7: Stringhe – Trasformare i Caratteri in Parole (E Dare Loro un Senso)


Lezione 7

Lezione 7: Stringhe – Trasformare i Caratteri in Parole (E Dare Loro un Senso)


Bentornato, intrepido esploratore di codice! 👋

Oggi ci avventuriamo nel mondo delle stringhe — perché, diciamocelo, i numeri sono fantastici, ma a volte servono le parole! Che si tratti di stampare un nome, leggere una frase o far sembrare il tuo programma un po’ più umano, le stringhe sono lo strumento di cui hai bisogno.

Allora, prendi la tua tazza di caffè (o tè, non ti giudicherò), e impariamo come manipolare i caratteri come veri professionisti.


Cos’è una Stringa?

Una stringa in C è essenzialmente un array di caratteri. Sì, gli array magici tornano! Ma questa volta, invece di memorizzare numeri, memorizziamo caratteri che, combinati insieme, formano parole, frasi o addirittura interi paragrafi.

In C, le stringhe sono array di tipo char, e finiscono con un carattere speciale chiamato terminatore nullo (\0), che dice al programma dove finisce la stringa.

Ecco come si dichiara una stringa:

char nome[10] = "Alice";

Spiegazione: Abbiamo dichiarato un array di caratteri nome che può memorizzare fino a 10 caratteri. La stringa "Alice" è memorizzata in questo array, e C aggiunge automaticamente il terminatore nullo alla fine.


Stampare Stringhe

Stampare le stringhe è semplice come usare printf con il formato %s. Proviamo:

#include <stdio.h>

int main() {
    char nome[10] = "Alice";
    printf("Ciao, %s!\n", nome);
    return 0;
}

Spiegazione: Abbiamo usato %s per stampare la stringa memorizzata nell’array nome. Facile, vero?


Input di Stringhe

Ottenere input dall’utente in C può diventare un po’ complicato. Puoi usare scanf, ma può essere rischioso (come riempire troppa memoria se l’utente inserisce troppo testo). Un’opzione più sicura è fgets, che ti permette di limitare il numero di caratteri che vuoi leggere.

Ecco come puoi prendere in input una stringa in modo sicuro:

#include <stdio.h>

int main() {
    char nome[50];
    printf("Inserisci il tuo nome: ");
    fgets(nome, sizeof(nome), stdin);  // Più sicuro di scanf
    printf("Ciao, %s", nome);
    return 0;
}

Spiegazione: fgets legge fino a 49 caratteri (lasciando spazio per il terminatore nullo) dall’input dell’utente e li memorizza nell’array nome. Nota come usiamo sizeof(nome) per assicurarci di non oltrepassare la memoria dell’array.


Manipolazione delle Stringhe

Ora parliamo di manipolare le stringhe. Poiché le stringhe sono solo array di caratteri, puoi accedere e modificare i singoli caratteri usando il loro indice, proprio come fai con qualsiasi altro array.

Ecco un esempio di come cambiare la prima lettera di una stringa:

#include <stdio.h>

int main() {
    char nome[] = "Bob";
    printf("Nome originale: %s\n", nome);

    nome[0] = 'R';  // Cambia 'B' in 'R'
    printf("Nome modificato: %s\n", nome);

    return 0;
}

Spiegazione: Abbiamo accesso al primo carattere della stringa (indice 0) e l’abbiamo cambiato da 'B' a 'R', trasformando "Bob" in "Rob".


Funzioni per le Stringhe

C fornisce una serie di funzioni per rendere più facile il lavoro con le stringhe. Ecco alcune delle più comuni:

  1. strlen – Restituisce la lunghezza di una stringa (escluso il terminatore nullo).
  2. strcpy – Copia una stringa in un’altra.
  3. strcmp – Confronta due stringhe per vedere se sono uguali.
  4. strcat – Concatena (unisce) due stringhe.

Proviamole:

#include <stdio.h>
#include <string.h>  // Necessario per le funzioni delle stringhe

int main() {
    char prima[20] = "Ciao";
    char seconda[20] = "Mondo";

    printf("Lunghezza della prima: %lu\n", strlen(prima));  // %lu per il tipo size_t
    strcat(prima, seconda);  // Concatena la seconda alla prima
    printf("Dopo la concatenazione: %s\n", prima);

    strcpy(seconda, "Tutti");
    printf("Nuova seconda: %s\n", seconda);

    if (strcmp(prima, seconda) == 0) {
        printf("Le stringhe sono uguali.\n");
    } else {
        printf("Le stringhe sono diverse.\n");
    }

    return 0;
}

Spiegazione:

  • strlen(prima) restituisce la lunghezza della stringa "Ciao".
  • strcat(prima, seconda) unisce "Mondo" alla fine di "Ciao", creando "CiaoMondo".
  • strcpy(seconda, "Tutti") copia "Tutti" in seconda, sostituendo "Mondo".
  • strcmp(prima, seconda) confronta le stringhe e ci dice se sono uguali o diverse.

Stringhe e Puntatori

In C, puoi anche lavorare con le stringhe usando i puntatori. Ecco un esempio rapido:

#include <stdio.h>

int main() {
    char *nome = "Alice";
    printf("Ciao, %s!\n", nome);
    return 0;
}

Spiegazione: Qui, nome è un puntatore alla stringa "Alice". Questo è un modo più efficiente dal punto di vista della memoria per gestire le stringhe, ma richiede attenzione per evitare di sovrascrivere la memoria in modo accidentale.


Sfida per Casa: Sondaggio sui Film Preferiti

Crea un programma che:

  1. Chieda all’utente di inserire il titolo del suo film preferito.
  2. Stampa un messaggio che includa il titolo del film.
  3. Usa strlen per stampare quanti caratteri ci sono nel titolo del film.

Pensieri Finali

Congratulazioni! Ora hai padroneggiato le basi per lavorare con le stringhe in C. Le stringhe sono estremamente utili per gestire il testo e sono ovunque nella programmazione. Nella Lezione 8 esploreremo più a fondo le funzioni, costruendo su ciò che abbiamo imparato finora. Ci vediamo lì! 🎉✨


Vedi anche