Menu
Coddy logo textTech

Ripasso: concatenazione dinamica di stringhe

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 61 di 63.

challenge icon

Sfida

Facile

Crea un programma C che implementi una funzione di concatenazione dinamica di stringhe per realizzare un’utilità di elaborazione del testo. Il programma dovrebbe:

  1. Scrivere una funzione chiamata concatenateStrings che:
    • Accetti due parametri char* chiamati str1 e str2
    • Restituisca un char* che punta a una stringa allocata dinamicamente
    • Calcoli la memoria totale necessaria per entrambe le stringhe più il terminatore nullo
    • Usi malloc() per allocare l’esatta quantità di memoria necessaria
    • Verifichi se l’allocazione della memoria è riuscita (restituisca NULL in caso di errore)
    • Usi strcpy() per copiare la prima stringa nella memoria allocata
    • Usi strcat() per aggiungere la seconda stringa al risultato
    • Restituisca il puntatore alla nuova stringa concatenata
  2. Scrivere una funzione chiamata processText che:
    • Accetti tre parametri char*: word1, word2 e separator
    • Restituisca un char* che punta a una stringa allocata dinamicamente
    • Crei una stringa combinata nel formato: word1 + separator + word2
    • Chiami prima concatenateStrings per combinare word1 e separator
    • Chiami poi di nuovo concatenateStrings per aggiungere word2 al risultato
    • Libera correttamente tutte le allocazioni di memoria intermedie
    • Restituisca il risultato finale della concatenazione
  3. Nella funzione main:
    • Dichiari tre array di caratteri di 50 elementi ciascuno: firstWord, secondWord e connector
    • Legga tre stringhe dall’input, corrispondenti alla prima parola, alla seconda parola e al connettore
    • Chiami la funzione processText con queste tre stringhe
    • Verifichi che il puntatore restituito non sia NULL
    • In caso di successo, stampi il risultato esattamente in questo formato: Result: [concatenated_string]
    • Se l’allocazione della memoria non è riuscita, stampi: Memory allocation failed
    • Calcoli e stampi la lunghezza della stringa risultante esattamente in questo formato: Length: [length]
    • Libera la memoria allocata dinamicamente

Questa sfida mette alla prova la tua padronanza dell’allocazione dinamica della memoria, delle funzioni di manipolazione delle stringhe, dei valori restituiti dai puntatori e della corretta gestione della memoria. Ti eserciterai a calcolare i requisiti di memoria, usare malloc() e free(), lavorare con più funzioni per le stringhe e gestire gli errori di allocazione della memoria. La sfida mostra come l’allocazione dinamica consenta alle funzioni di creare e restituire dati che persistono oltre il loro ambito.

Provalo tu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO: Scrivi qui la funzione concatenateStrings

// TODO: Scrivi qui la funzione processText

int main() {
    // Leggi l'input
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Scrivi il tuo codice qui sotto
    // Chiama la funzione processText e gestisci il risultato
    
    return 0;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online