Lekcja 7: Łańcuchy Znaków – Przemieniamy Znaki w Słowa (I Nadajemy Im Sens)


Lekcja 7

Lekcja 7: Łańcuchy Znaków – Przemieniamy Znaki w Słowa (I Nadajemy Im Sens)


Witaj ponownie, dzielny odkrywco kodu! 👋

Dziś wkraczamy w świat łańcuchów znaków — bo, powiedzmy sobie szczerze, liczby są świetne, ale czasami trzeba użyć słów! Niezależnie od tego, czy drukujesz imię, odczytujesz zdanie, czy próbujesz, żeby twoja aplikacja była bardziej ludzka, łańcuchy znaków to narzędzie, którego szukasz.

Zatem chwyć filiżankę kawy (albo herbaty, bez oceniania), i nauczmy się manipulować znakami jak prawdziwi profesjonaliści.


Czym Jest Łańcuch Znaków?

Łańcuch znaków w C to w zasadzie tablica znaków. Tak, te magiczne tablice znowu w akcji! Ale tym razem, zamiast liczb, przechowujemy znaki, które łączą się w słowa, zdania, a nawet całe akapity.

W C łańcuchy znaków to tablice typu char, które kończą się specjalnym znakiem, zwanym znakiem końca łańcucha (\0), który informuje program, gdzie kończy się łańcuch.

Oto jak zadeklarować łańcuch znaków:

char imię[10] = "Alicja";

Wyjaśnienie: Zadeklarowaliśmy tablicę znaków imię, która może przechowywać do 10 znaków. Łańcuch znaków "Alicja" jest przechowywany w tej tablicy, a C automatycznie dodaje znak końca łańcucha na końcu.


Wydruk Łańcuchów Znaków

Wydrukowanie łańcuchów znaków jest tak proste, jak użycie printf z formatem %s. Spróbujmy:

#include <stdio.h>

int main() {
    char imię[10] = "Alicja";
    printf("Cześć, %s!\n", imię);
    return 0;
}

Wyjaśnienie: Użyliśmy %s, aby wydrukować łańcuch znaków przechowywany w tablicy imię. Łatwizna, prawda?


Wprowadzanie Łańcuchów Znaków

Pobranie łańcucha znaków od użytkownika w C może być trochę skomplikowane. Można użyć scanf, ale to ryzykowne (można “przepełnić bufor”, jeśli użytkownik wprowadzi zbyt dużo tekstu). Bezpieczniejszą opcją jest fgets, która pozwala ograniczyć liczbę znaków do odczytu.

Oto jak można bezpiecznie pobrać łańcuch znaków od użytkownika:

#include <stdio.h>

int main() {
    char imię[50];
    printf("Wpisz swoje imię: ");
    fgets(imię, sizeof(imię), stdin);  // Bezpieczniejsze niż scanf
    printf("Cześć, %s", imię);
    return 0;
}

Wyjaśnienie: fgets odczytuje do 49 znaków (zostawiając miejsce na znak końca łańcucha) z wejścia użytkownika i zapisuje je w tablicy imię. Zwróć uwagę, jak używamy sizeof(imię), aby uniknąć przepełnienia bufora.


Manipulacja Łańcuchami Znaków

Teraz porozmawiajmy o manipulacji łańcuchami znaków. Ponieważ łańcuchy znaków to po prostu tablice znaków, możesz uzyskać dostęp do poszczególnych znaków i zmieniać je za pomocą indeksu, tak jak w każdej innej tablicy.

Oto przykład zmiany pierwszej litery łańcucha znaków:

#include <stdio.h>

int main() {
    char imię[] = "Bob";
    printf("Oryginalne imię: %s\n", imię);

    imię[0] = 'R';  // Zmieniamy 'B' na 'R'
    printf("Zmodyfikowane imię: %s\n", imię);

    return 0;
}

Wyjaśnienie: Uzyskaliśmy dostęp do pierwszego znaku łańcucha (indeks 0) i zmieniliśmy go z 'B' na 'R', przekształcając "Bob" w "Rob".


Funkcje do Pracy z Łańcuchami Znaków

C oferuje zestaw funkcji, które ułatwiają pracę z łańcuchami znaków. Oto kilka z najczęściej używanych:

  1. strlen – Zwraca długość łańcucha znaków (bez znaku końca łańcucha).
  2. strcpy – Kopiuje jeden łańcuch znaków do drugiego.
  3. strcmp – Porównuje dwa łańcuchy znaków, aby sprawdzić, czy są takie same.
  4. strcat – Łączy (konkatenuje) dwa łańcuchy znaków.

Spróbujmy ich użyć:

#include <stdio.h>
#include <string.h>  // Potrzebne do pracy z funkcjami łańcuchów znaków

int main() {
    char pierwszy[20] = "Cześć";
    char drugi[20] = "Świecie";

    printf("Długość pierwszego łańcucha: %lu\n", strlen(pierwszy));  // %lu dla typu size_t
    strcat(pierwszy, drugi);  // Łączy drugi łańcuch z pierwszym
    printf("Po połączeniu: %s\n", pierwszy);

    strcpy(drugi, "Wszyscy");
    printf("Nowy drugi łańcuch: %s\n", drugi);

    if (strcmp(pierwszy, drugi) == 0) {
        printf("Łańcuchy są takie same.\n");
    } else {
        printf("Łańcuchy są różne.\n");
    }

    return 0;
}

Wyjaśnienie:

  • strlen(pierwszy) zwraca długość łańcucha "Cześć".
  • strcat(pierwszy, drugi) łączy "Świecie" z końcem łańcucha "Cześć", tworząc "CześćŚwiecie".
  • strcpy(drugi, "Wszyscy") kopiuje "Wszyscy" do drugiego łańcucha, zastępując "Świecie".
  • strcmp(pierwszy, drugi) porównuje łańcuchy znaków i informuje, czy są takie same, czy różne.

Łańcuchy Znaków i Wskaźniki

W C można również pracować z łańcuchami znaków za pomocą wskaźników. Oto szybki przykład:

#include <stdio.h>

int main() {
    char *imię = "Alicja";
    printf("Cześć, %s!\n", imię);
    return 0;
}

Wyjaśnienie: Tutaj imię to wskaźnik na łańcuch znaków "Alicja". Jest to bardziej efektywny sposób zarządzania pamięcią przy pracy z łańcuchami znaków, ale wymaga ostrożności, aby przypadkowo nie nadpisać pamięci.


Zadanie Domowe: Ankieta o Ulubionym Filmie

Napisz program, który:

  1. Poprosi użytkownika o podanie tytułu jego ulubionego filmu.
  2. Wyświetli wiadomość zawierającą tytuł filmu.
  3. Użyje funkcji strlen, aby wyświetlić, ile znaków ma tytuł filmu.

Ostatnie Myśli

Gratulacje! Opanowałeś teraz podstawy pracy z łańcuchami znaków w C. Łańcuchy znaków są niezwykle przydatne do przetwarzania tekstu, a w programowaniu spotkasz je na każdym kroku. W Lekcji 8 zagłębimy się w temat funkcji, rozwijając to, czego już się nauczyłeś. Do zobaczenia tam! 🎉✨


Zobacz też