Używanie strcat()
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 17 z 63.
Wiesz już, jak kopiować ciągi znaków za pomocą strcpy(), ale co zrobić, jeśli chcesz połączyć ze sobą dwa ciągi znaków? Nazywa się to konkatenacją, a język C udostępnia do tego celu funkcję strcat() z biblioteki <string.h>.
Funkcja strcat() dołącza zawartość jednego ciągu znaków na końcu innego ciągu znaków. Przyjmuje dwa argumenty: docelowy ciąg znaków (który zostanie zmodyfikowany) oraz źródłowy ciąg znaków (który zostanie dodany na końcu).
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting zawiera teraz "Hello World"Kluczowe jest, aby ciąg docelowy miał wystarczająco dużo miejsca, by pomieścić zarówno pierwotną zawartość, jak i dołączaną nową zawartość. Funkcja strcat() znajduje terminator null w ciągu docelowym, usuwa go, kopiuje ciąg źródłowy w to miejsce i dodaje nowy terminator null na samym końcu.
Czasami trzeba połączyć liczbę (na przykład int) z ciągiem znaków. Ponieważ strcat() działa tylko z tablicami znaków, najpierw trzeba przekonwertować liczbę na ciąg znaków. Można to zrobić za pomocą sprintf(), która działa podobnie jak printf(), ale zapisuje sformatowany wynik w tablicy znaków zamiast wyświetlać go na ekranie. sprintf() jest częścią <stdio.h>, który jest już dołączony w większości programów w C.
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr zawiera teraz "42" jako ciąg znakówGdy liczba jest już zapisana jako ciąg znaków w numStr, możesz użyć strcat(), aby jak zwykle dołączyć ją do innego ciągu znaków:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // summary zawiera teraz "Total people processed: 3"Ta funkcja jest niezbędna do tworzenia dłuższych ciągów znaków z mniejszych fragmentów, na przykład całych zdań z pojedynczych słów lub łączenia danych wprowadzonych przez użytkownika ze wstępnie zdefiniowanym tekstem.
Wyzwanie
ŁatwyNapisz program w C, który demonstruje łączenie ciągów znaków za pomocą funkcji strcat() w celu tworzenia spersonalizowanych wiadomości. Twój program powinien:
- Wczytać liczbę całkowitą
noznaczającą liczbę osób do przetworzenia - Dla każdej osoby:
- Wczytać jej imię ze standardowego wejścia
- Wczytać jej nazwisko ze standardowego wejścia
- Utworzyć tablicę znaków o nazwie
fullNamezawierającą 100 elementów - Użyć
strcpy(), aby skopiować imię dofullName - Użyć
strcat(), aby dołączyć pojedynczą spację " " dofullName - Użyć
strcat(), aby dołączyć nazwisko dofullName - Utworzyć tablicę znaków o nazwie
greetingzawierającą 150 elementów - Użyć
strcpy(), aby skopiować "Hello, " dogreeting - Użyć
strcat(), aby dołączyćfullNamedogreeting - Użyć
strcat(), aby dołączyć "! Welcome to our program." dogreeting - Wyświetlić końcową wiadomość powitalną
- Po przetworzeniu wszystkich osób utworzyć wiadomość podsumowującą:
- Utworzyć tablicę znaków o nazwie
summaryzawierającą 100 elementów - Użyć
strcpy(), aby skopiować "Total people processed: " dosummary - Przekonwertować liczbę
nna ciąg znaków i użyćstrcat(), aby dołączyć go dosummary - Wyświetlić wiadomość podsumowującą
- Utworzyć tablicę znaków o nazwie
Pamiętaj, aby dołączyć nagłówek <string.h>, by móc używać funkcji do obsługi ciągów znaków.
Wynik powinien być wyświetlony w następującym formacie:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]Na przykład, jeśli dane wejściowe to:
2
John
Doe
Alice
SmithWynik powinien być następujący:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2To wyzwanie sprawdza twoje zrozumienie używania strcat() do łączenia wielu ciągów znaków, łączenia jej z strcpy() w celu początkowego przygotowania ciągu znaków oraz budowania złożonych ciągów znaków z wielu składników krok po kroku.
Spróbuj swoich sił
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// Wczytaj liczbę osób
int n;
scanf("%d", &n);
// TODO: Napisz swój kod poniżej
// Przetwórz dane każdej osoby i utwórz wiadomości powitalne
// Następnie utwórz i wyświetl wiadomość podsumowującą
return 0;
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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