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.
Wyzwanie
ŁatwyUtwó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:
- Napisać funkcję o nazwie
concatenateStrings, która:- Przyjmuje dwa parametry typu
char*o nazwachstr1istr2 - 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
- Przyjmuje dwa parametry typu
- Napisać funkcję o nazwie
processText, która:- Przyjmuje trzy parametry typu
char*:word1,word2iseparator - 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ćword1iseparator - Następnie ponownie wywołuje
concatenateStrings, aby dołączyćword2do wyniku - Poprawnie zwalnia wszelką pośrednio przydzieloną pamięć
- Zwraca końcowy połączony wynik
- Przyjmuje trzy parametry typu
- W funkcji main:
- Deklaruje trzy tablice znaków, każdą o rozmiarze 50:
firstWord,secondWordiconnector - Odczytuje z wejścia trzy ciągi znaków reprezentujące pierwsze słowo, drugie słowo i łącznik
- Wywołuje funkcję
processTextz 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ęć
- Deklaruje trzy tablice znaków, każdą o rozmiarze 50:
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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online