Ripasso: concatenazione dinamica di stringhe
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 61 di 63.
Sfida
FacileCrea un programma in C che implementi una funzione di concatenazione dinamica di stringhe per realizzare un'utilità di elaborazione del testo. Il programma dovrebbe:
- Scrivere una funzione denominata
concatenateStringsche:- Accetta due parametri
char*denominatistr1estr2 - 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
- Accetta due parametri
- Scrivere una funzione denominata
processTextche:- Accetta tre parametri
char*:word1,word2eseparator - Restituisce un
char*che punta a una stringa allocata dinamicamente - Crea una stringa combinata nel formato: word1 + separator + word2
- Chiama prima
concatenateStringsper combinareword1eseparator - Poi chiama di nuovo
concatenateStringsper aggiungereword2al risultato - Libera correttamente eventuali allocazioni di memoria intermedie
- Restituisce il risultato concatenato finale
- Accetta tre parametri
- Nella funzione main:
- Dichiara tre array di caratteri, ciascuno di dimensione 50:
firstWord,secondWordeconnector - Legge tre stringhe dall'input che rappresentano la prima parola, la seconda parola e il connettore
- Chiama la funzione
processTextcon 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
- Dichiara tre array di caratteri, ciascuno di dimensione 50:
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
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni8Struct e puntatori
Puntatori a structL’operatore freccia (->)Passare le struct per valorePassare puntatori a structAllocazione dinamica delle structRiepilogo: modifica di una struct - puntatore11Sfide finali di ripasso
Ripasso: concatenazione dinamica di stringheRipasso: array di structRipasso: contatore di frequenza delle parole3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online