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 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:
- Napisać funkcję o nazwie
concatenateStrings, która:- Przyjmuje dwa parametry typu
char*o nazwachstr1istr2 - 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
- Przyjmuje dwa parametry typu
- Napisać funkcję o nazwie
processText, która:- Przyjmuje trzy parametry typu
char*:word1,word2iseparator - 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ćword1iseparator - Następnie ponownie wywołuje
concatenateStrings, aby dołączyćword2do wyniku - Prawidłowo zwalnia wszelką pośrednio zaalokowaną 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 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ęć
- Deklaruje trzy tablice znaków, każdą o rozmiarze 50:
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
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