Menu
Coddy logo textTech

Powtórka: dynamiczne łączenie ciągów znaków

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 61 z 63.

challenge icon

Wyzwanie

Łatwy

Utwórz program w języku C, który implementuje funkcję dynamicznego łączenia ciągów znaków, aby zbudować narzędzie do przetwarzania tekstu. Twój program powinien:

  1. Napisać funkcję o nazwie concatenateStrings, która:
    • Przyjmuje dwa parametry typu char* o nazwach str1 i str2
    • Zwraca wartość char* wskazującą na dynamicznie zaalokowany ciąg znaków
    • Oblicza całkowitą ilość pamięci potrzebnej dla obu ciągów znaków oraz znaku kończącego ciąg
    • Używa malloc(), aby zaalokować dokładną ilość wymaganej pamięci
    • Sprawdza, czy alokacja pamięci się powiodła (zwraca NULL, jeśli alokacja się nie powiedzie)
    • Używa strcpy(), aby skopiować pierwszy ciąg znaków do zaalokowanej pamięci
    • Używa strcat(), aby dołączyć drugi ciąg znaków do wyniku
    • Zwraca wskaźnik do nowo utworzonego połączonego ciągu znaków
  2. Napisać funkcję o nazwie processText, która:
    • Przyjmuje trzy parametry typu char*: word1, word2 i separator
    • Zwraca wartość char* wskazującą na dynamicznie zaalokowany ciąg znaków
    • Tworzy połączony ciąg znaków w formacie: word1 + separator + word2
    • Najpierw wywołuje concatenateStrings, aby połączyć word1 i separator
    • Następnie ponownie wywołuje concatenateStrings, aby dołączyć word2 do wyniku
    • Prawidłowo zwalnia wszelką pośrednio zaalokowaną pamięć
    • Zwraca końcowy połączony wynik
  3. W funkcji main:
    • Deklaruje trzy tablice znaków, każdą o rozmiarze 50: firstWord, secondWord i connector
    • Odczytuje z wejścia trzy ciągi znaków reprezentujące pierwsze słowo, drugie słowo i łącznik
    • Wywołuje funkcję processText z tymi trzema ciągami znaków
    • Sprawdza, czy zwrócony wskaźnik nie ma wartości NULL
    • Jeśli operacja się powiedzie, wypisuje wynik dokładnie w tym formacie: Result: [concatenated_string]
    • Jeśli alokacja pamięci się nie powiedzie, wypisuje: Memory allocation failed
    • Oblicza i wypisuje długość wynikowego ciągu znaków dokładnie w tym formacie: Length: [length]
    • Zwalnia dynamicznie zaalokowaną pamięć

To wyzwanie sprawdza Twoją biegłość w dynamicznej alokacji pamięci, funkcjach manipulujących ciągami znaków, wartościach zwracanych przez wskaźniki oraz prawidłowym zarządzaniu pamięcią. Przećwiczysz obliczanie wymagań pamięciowych, używanie malloc() i free(), pracę z wieloma funkcjami obsługującymi ciągi znaków oraz obsługę błędów alokacji pamięci. Wyzwanie pokazuje, jak dynamiczna alokacja pozwala funkcjom tworzyć i zwracać dane, które pozostają dostępne po zakończeniu ich zakresu.

Spróbuj swoich sił

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

// TODO: Napisz tutaj funkcję concatenateStrings

// TODO: Napisz tutaj funkcję processText

int main() {
    // Wczytaj dane wejściowe
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO: Napisz swój kod poniżej
    // Wywołaj funkcję processText i obsłuż wynik
    
    return 0;
}

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online