Menu
Coddy logo textTech

Wiederholung: Dynamische String-Konkatenation

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 61 von 63.

challenge icon

Aufgabe

Einfach

Erstelle ein C-Programm, das eine Funktion zur dynamischen Verkettung von Zeichenketten implementiert, um ein Dienstprogramm zur Textverarbeitung zu erstellen. Dein Programm sollte:

  1. Eine Funktion namens concatenateStrings schreiben, die:
    • Zwei char*-Parameter mit den Namen str1 und str2 entgegennimmt
    • Einen char* zurückgibt, der auf eine dynamisch reservierte Zeichenkette zeigt
    • Den insgesamt benötigten Speicher für beide Zeichenketten einschließlich des Nullterminators berechnet
    • malloc() verwendet, um genau die benötigte Speichermenge zu reservieren
    • Überprüft, ob die Speicherreservierung erfolgreich war (gibt NULL zurück, wenn die Reservierung fehlschlägt)
    • strcpy() verwendet, um die erste Zeichenkette in den reservierten Speicher zu kopieren
    • strcat() verwendet, um die zweite Zeichenkette an das Ergebnis anzuhängen
    • Den Zeiger auf die neu erstellte verkettete Zeichenkette zurückgibt
  2. Eine Funktion namens processText schreiben, die:
    • Drei char*-Parameter entgegennimmt: word1, word2 und separator
    • Einen char* zurückgibt, der auf eine dynamisch reservierte Zeichenkette zeigt
    • Eine kombinierte Zeichenkette im Format erstellt: word1 + separator + word2
    • Zuerst concatenateStrings aufruft, um word1 und separator zu verbinden
    • Dann erneut concatenateStrings aufruft, um word2 an das Ergebnis anzuhängen
    • Alle zwischenzeitlichen Speicherreservierungen ordnungsgemäß freigibt
    • Das endgültige verkettete Ergebnis zurückgibt
  3. In der main-Funktion:
    • Drei Zeichenarrays mit jeweils der Größe 50 deklarieren: firstWord, secondWord und connector
    • Drei Zeichenketten aus der Eingabe lesen, die das erste Wort, das zweite Wort und das Verbindungselement darstellen
    • Die Funktion processText mit diesen drei Zeichenketten aufrufen
    • Überprüfen, ob der zurückgegebene Zeiger nicht NULL ist
    • Bei Erfolg das Ergebnis in genau diesem Format ausgeben: Result: [concatenated_string]
    • Wenn die Speicherreservierung fehlgeschlagen ist, Folgendes ausgeben: Memory allocation failed
    • Die Länge der Ergebniszeichenkette berechnen und in genau diesem Format ausgeben: Length: [length]
    • Den dynamisch reservierten Speicher freigeben

Diese Herausforderung prüft deine Beherrschung der dynamischen Speicherreservierung, der Funktionen zur Zeichenkettenmanipulation, der Rückgabewerte von Zeigern und der ordnungsgemäßen Speicherverwaltung. Du übst das Berechnen des Speicherbedarfs, die Verwendung von malloc() und free(), die Arbeit mit mehreren Zeichenkettenfunktionen und den Umgang mit fehlgeschlagenen Speicherreservierungen. Die Herausforderung zeigt, wie dynamische Speicherreservierung es Funktionen ermöglicht, Daten zu erstellen und zurückzugeben, die über ihren Gültigkeitsbereich hinaus bestehen bleiben.

Probier es selbst

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

// TODO: Schreiben Sie hier Ihre concatenateStrings-Funktion

// TODO: Schreiben Sie hier Ihre processText-Funktion

int main() {
    // Eingabe lesen
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Schreiben Sie Ihren Code unten
    // Rufen Sie die processText-Funktion auf und verarbeiten Sie das Ergebnis
    
    return 0;
}

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler