Menu
CoddyTech

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 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 char* wskazujący na dynamicznie przydzielony ciąg znaków
    • Oblicza całkowitą ilość pamięci potrzebną dla obu ciągów znaków wraz z terminatorem null
    • Używa malloc(), aby przydzielić dokładnie wymaganą ilość pamięci
    • Sprawdza, czy przydzielenie pamięci się powiodło (zwraca NULL, jeśli przydzielenie się nie powiedzie)
    • Używa strcpy(), aby skopiować pierwszy ciąg znaków do przydzielonej 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 char* wskazujący na dynamicznie przydzielony 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
    • Poprawnie zwalnia wszelką pośrednio przydzieloną 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 jest równy NULL
    • Jeśli się powiedzie, wyświetla wynik dokładnie w tym formacie: Result: [concatenated_string]
    • Jeśli przydzielenie pamięci się nie powiedzie, wyświetla: Memory allocation failed
    • Oblicza i wyświetla długość wynikowego ciągu znaków dokładnie w tym formacie: Length: [length]
    • Zwalnia dynamicznie przydzieloną pamięć

To wyzwanie sprawdza Twoją znajomość dynamicznego przydzielania pamięci, funkcji manipulujących ciągami znaków, zwracanych wartości wskaźnikowych oraz poprawnego zarządzania pamięcią. Przećwiczysz obliczanie wymaganego rozmiaru pamięci, używanie malloc() i free(), pracę z wieloma funkcjami operującymi na ciągach znaków oraz obsługę niepowodzeń przydzielania pamięci. Wyzwanie pokazuje, jak dynamiczne przydzielanie pamięci pozwala funkcjom tworzyć i zwracać dane, które pozostają dostępne po zakończeniu ich działania.

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