Wiederholung: Dynamische String-Konkatenation
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 61 von 63.
Aufgabe
EinfachErstelle ein C-Programm, das eine Funktion zur dynamischen Verkettung von Zeichenfolgen implementiert, um ein Dienstprogramm zur Textverarbeitung zu erstellen. Dein Programm soll:
- Eine Funktion namens
concatenateStringsschreiben, die:- Zwei Parameter vom Typ
char*namensstr1undstr2entgegennimmt - Ein
char*zurückgibt, das auf eine dynamisch zugewiesene Zeichenfolge zeigt - Den insgesamt benötigten Speicher für beide Zeichenfolgen plus den Nullterminator berechnet
malloc()verwendet, um exakt die benötigte Speichermenge zuzuweisen- Überprüft, ob die Speicherzuweisung erfolgreich war (gibt NULL zurück, wenn die Zuweisung fehlschlägt)
strcpy()verwendet, um die erste Zeichenfolge in den zugewiesenen Speicher zu kopierenstrcat()verwendet, um die zweite Zeichenfolge an das Ergebnis anzuhängen- Den Zeiger auf die neu erstellte verkettete Zeichenfolge zurückgibt
- Zwei Parameter vom Typ
- Eine Funktion namens
processTextschreiben, die:- Drei Parameter vom Typ
char*entgegennimmt:word1,word2undseparator - Ein
char*zurückgibt, das auf eine dynamisch zugewiesene Zeichenfolge zeigt - Eine kombinierte Zeichenfolge im Format erstellt: word1 + separator + word2
- Zuerst
concatenateStringsaufruft, umword1undseparatorzu verketten - Dann erneut
concatenateStringsaufruft, umword2an das Ergebnis anzuhängen - Alle zwischenzeitlichen Speicherzuweisungen ordnungsgemäß freigibt
- Das endgültige verkettete Ergebnis zurückgibt
- Drei Parameter vom Typ
- In der Funktion main:
- Drei Zeichenarrays mit jeweils der Größe 50 deklarieren:
firstWord,secondWordundconnector - Drei Zeichenfolgen aus der Eingabe einlesen, die das erste Wort, das zweite Wort und das Verbindungselement darstellen
- Die Funktion
processTextmit diesen drei Zeichenfolgen aufrufen - Überprüfen, ob der zurückgegebene Zeiger nicht NULL ist
- Bei Erfolg das Ergebnis in diesem exakten Format ausgeben:
Result: [concatenated_string] - Bei fehlgeschlagener Speicherzuweisung Folgendes ausgeben:
Memory allocation failed - Die Länge der Ergebniszeichenfolge berechnen und in diesem exakten Format ausgeben:
Length: [length] - Den dynamisch zugewiesenen Speicher freigeben
- Drei Zeichenarrays mit jeweils der Größe 50 deklarieren:
Diese Herausforderung prüft deine Kenntnisse der dynamischen Speicherzuweisung, der Zeichenfolgenmanipulationsfunktionen, der Rückgabewerte von Zeigern und der ordnungsgemäßen Speicherverwaltung. Du übst, den Speicherbedarf zu berechnen, malloc() und free() zu verwenden, mit mehreren Zeichenfolgenfunktionen zu arbeiten und Fehler bei der Speicherzuweisung zu behandeln. Die Herausforderung zeigt, wie Funktionen mithilfe dynamischer Speicherzuweisung Daten erstellen und zurückgeben können, die über ihren Gültigkeitsbereich hinaus bestehen bleiben.
Probier es selbst
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// TODO: Schreibe hier deine Funktion concatenateStrings
// TODO: Schreibe hier deine Funktion processText
int main() {
// Eingabe einlesen
char firstWord[50];
char secondWord[50];
char connector[50];
scanf("%s", firstWord);
scanf("%s", secondWord);
scanf("%s", connector);
// TODO: Schreibe deinen Code unten
// Rufe die Funktion processText auf und verarbeite das Ergebnis
return 0;
}Alle Lektionen in Logik & Ablauf
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-FunktionenÜbe selbstständig: Online-C-Compiler