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 Zeichenketten implementiert, um ein Dienstprogramm zur Textverarbeitung zu erstellen. Dein Programm sollte:
- Eine Funktion namens
concatenateStringsschreiben, die:- Zwei
char*-Parameter mit den Namenstr1undstr2entgegennimmt - 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 kopierenstrcat()verwendet, um die zweite Zeichenkette an das Ergebnis anzuhängen- Den Zeiger auf die neu erstellte verkettete Zeichenkette zurückgibt
- Zwei
- Eine Funktion namens
processTextschreiben, die:- Drei
char*-Parameter entgegennimmt:word1,word2undseparator - Einen
char*zurückgibt, der auf eine dynamisch reservierte Zeichenkette zeigt - Eine kombinierte Zeichenkette im Format erstellt: word1 + separator + word2
- Zuerst
concatenateStringsaufruft, umword1undseparatorzu verbinden - Dann erneut
concatenateStringsaufruft, umword2an das Ergebnis anzuhängen - Alle zwischenzeitlichen Speicherreservierungen ordnungsgemäß freigibt
- Das endgültige verkettete Ergebnis zurückgibt
- Drei
- In der main-Funktion:
- Drei Zeichenarrays mit jeweils der Größe 50 deklarieren:
firstWord,secondWordundconnector - Drei Zeichenketten aus der Eingabe lesen, die das erste Wort, das zweite Wort und das Verbindungselement darstellen
- Die Funktion
processTextmit 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
- Drei Zeichenarrays mit jeweils der Größe 50 deklarieren:
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
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