Menu
Coddy logo textTech

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ów

Gdy 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.

challenge icon

Wyzwanie

Łatwy

Napisz 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:

  1. Wczytać liczbę całkowitą n oznaczającą liczbę osób do przetworzenia
  2. Dla każdej osoby:
    • Wczytać jej imię ze standardowego wejścia
    • Wczytać jej nazwisko ze standardowego wejścia
    • Utworzyć tablicę znaków o nazwie fullName zawierającą 100 elementów
    • Użyć strcpy(), aby skopiować imię do fullName
    • Użyć strcat(), aby dołączyć pojedynczą spację " " do fullName
    • Użyć strcat(), aby dołączyć nazwisko do fullName
    • Utworzyć tablicę znaków o nazwie greeting zawierającą 150 elementów
    • Użyć strcpy(), aby skopiować "Hello, " do greeting
    • Użyć strcat(), aby dołączyć fullName do greeting
    • Użyć strcat(), aby dołączyć "! Welcome to our program." do greeting
    • Wyświetlić końcową wiadomość powitalną
  3. Po przetworzeniu wszystkich osób utworzyć wiadomość podsumowującą:
    • Utworzyć tablicę znaków o nazwie summary zawierającą 100 elementów
    • Użyć strcpy(), aby skopiować "Total people processed: " do summary
    • Przekonwertować liczbę n na ciąg znaków i użyć strcat(), aby dołączyć go do summary
    • Wyświetlić wiadomość podsumowującą

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
Smith

Wynik powinien być następujący:

Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2

To 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;
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator C online