Menu
CoddyTech

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 in 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 denominata concatenateStrings che:
    • Accetta due parametri char* denominati str1 e str2
    • Restituisce un char* che punta a una stringa allocata dinamicamente
    • Calcola la memoria totale necessaria per entrambe le stringhe più il terminatore nullo
    • Usa malloc() per allocare l'esatta quantità di memoria richiesta
    • Verifica che l'allocazione della memoria sia riuscita (restituisce NULL se l'allocazione non riesce)
    • Usa strcpy() per copiare la prima stringa nella memoria allocata
    • Usa strcat() per aggiungere la seconda stringa al risultato
    • Restituisce il puntatore alla stringa concatenata appena creata
  2. Scrivere una funzione denominata processText che:
    • Accetta tre parametri char*: word1, word2 e separator
    • Restituisce un char* che punta a una stringa allocata dinamicamente
    • Crea una stringa combinata nel formato: word1 + separator + word2
    • Chiama prima concatenateStrings per combinare word1 e separator
    • Poi chiama di nuovo concatenateStrings per aggiungere word2 al risultato
    • Libera correttamente eventuali allocazioni di memoria intermedie
    • Restituisce il risultato concatenato finale
  3. Nella funzione main:
    • Dichiara tre array di caratteri, ciascuno di dimensione 50: firstWord, secondWord e connector
    • Legge tre stringhe dall'input che rappresentano la prima parola, la seconda parola e il connettore
    • Chiama la funzione processText con queste tre stringhe
    • Verifica che il puntatore restituito non sia NULL
    • Se l'operazione riesce, stampa il risultato in questo formato esatto: Result: [concatenated_string]
    • Se l'allocazione della memoria non è riuscita, stampa: Memory allocation failed
    • Calcola e stampa la lunghezza della stringa risultante in questo formato esatto: Length: [length]
    • Libera la memoria allocata dinamicamente

Questa sfida verifica 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, a usare malloc() e free(), a lavorare con più funzioni per le stringhe e a gestire gli errori di allocazione della memoria. La sfida mostra come l'allocazione dinamica permetta 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 tua funzione concatenateStrings

// TODO: Scrivi qui la tua 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