Wiederholung: Dynamische String-Konkatenation
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 61 von 63.
Aufgabe
EinfachErstellen Sie ein C-Programm, das eine dynamische String-Verkettungsfunktion implementiert, um ein Textverarbeitungsprogramm zu erstellen. Ihr Programm sollte:
- Schreiben Sie eine Funktion namens
concatenateStrings, die:- Zwei
char*Parameter namensstr1undstr2entgegennimmt - Einen
char*zurückgibt, der auf einen dynamisch zugewiesenen String zeigt - Den gesamten Speicherbedarf für beide Strings plus den Null-Terminator berechnet
malloc()verwendet, um genau die erforderliche Menge an Speicher zuzuweisen- Prüft, ob die Speicherzuweisung erfolgreich war (gibt NULL zurück, wenn die Zuweisung fehlschlägt)
strcpy()verwendet, um den ersten String in den zugewiesenen Speicher zu kopierenstrcat()verwendet, um den zweiten String an das Ergebnis anzuhängen- Den Pointer auf den neu erstellten verketteten String zurückgibt
- Zwei
- Schreiben Sie eine Funktion namens
processText, die:- Drei
char*Parameter entgegennimmt:word1,word2undseparator - Einen
char*zurückgibt, der auf einen dynamisch zugewiesenen String zeigt - Einen kombinierten String im Format: word1 + separator + word2 erstellt
- Zuerst
concatenateStringsaufruft, umword1undseparatorzu kombinieren - Dann erneut
concatenateStringsaufruft, umword2an das Ergebnis anzuhängen - Alle zwischenzeitlichen Speicherzuweisungen ordnungsgemäß freigibt
- Das endgültige verkettete Ergebnis zurückgibt
- Drei
- In der main-Funktion:
- Drei Character-Arrays der Größe 50 deklariert:
firstWord,secondWordundconnector - Drei Strings von der Eingabe liest, die das erste Wort, das zweite Wort und das Verbindungsstück repräsentieren
- Die Funktion
processTextmit diesen drei Strings aufruft - Prüft, ob der zurückgegebene Pointer nicht NULL ist
- Bei Erfolg das Ergebnis in diesem exakten Format ausgibt:
Result: [concatenated_string] - Falls die Speicherzuweisung fehlgeschlagen ist, folgendes ausgibt:
Memory allocation failed - Die Länge des Ergebnis-Strings in diesem exakten Format berechnet und ausgibt:
Length: [length] - Den dynamisch zugewiesenen Speicher freigibt
- Drei Character-Arrays der Größe 50 deklariert:
Diese Herausforderung testet Ihre Beherrschung der dynamischen Speicherzuweisung, der String-Manipulationsfunktionen, der Pointer-Rückgabewerte und der ordnungsgemäßen Speicherverwaltung. Sie üben die Berechnung des Speicherbedarfs, die Verwendung von malloc() und free(), die Arbeit mit mehreren String-Funktionen und den Umgang mit Fehlern bei der Speicherzuweisung. Die Herausforderung zeigt, wie die dynamische Zuweisung 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 Logic & Flow
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