W tej lekcji poznamy podstawowe funkcje do operacji na łańcuchach znaków w C++. Łańcuchy znaków, czyli ciągi tekstowe, są często używane w programowaniu do przechowywania i manipulacji danymi tekstowymi, takimi jak imiona, adresy, komunikaty itp. W C++ można pracować z tekstem za pomocą klasy std::string
, która oferuje wiele przydatnych funkcji, takich jak łączenie, znajdowanie, porównywanie czy modyfikowanie ciągów znaków.
Przykład kodu – Operacje na łańcuchach znaków
Stwórz plik o nazwie string_operations.cpp
i wklej do niego poniższy kod:
// Importujemy bibliotekę iostream do operacji wejścia/wyjścia
#include <iostream>
// Importujemy bibliotekę string, aby móc korzystać z klasy std::string
#include <string>
// Główna funkcja programu
int main() {
// --- Deklaracja i inicjalizacja łańcuchów znaków ---
// Tworzymy zmienną typu string o nazwie 'greeting' i przypisujemy jej wartość "Cześć"
std::string greeting = "Cześć";
// Tworzymy kolejny łańcuch znaków o nazwie 'name' i przypisujemy mu wartość "Jan"
std::string name = "Jan";
// --- Łączenie (konkatenacja) łańcuchów znaków ---
// Łączymy zmienne 'greeting' i 'name' w nową zmienną 'message'
std::string message = greeting + ", " + name + "!";
std::cout << "Wiadomość: " << message << std::endl;
// --- Pobieranie długości łańcucha ---
// Używamy metody length(), aby uzyskać długość łańcucha 'message'
std::cout << "Długość wiadomości: " << message.length() << " znaków" << std::endl;
// --- Dostęp do poszczególnych znaków ---
// Wyświetlamy pierwszy znak łańcucha 'name' za pomocą operatora indeksowania []
std::cout << "Pierwsza litera imienia: " << name[0] << std::endl;
// Modyfikujemy pierwszy znak łańcucha 'name'
name[0] = 'K';
std::cout << "Zmienione imię: " << name << std::endl;
// --- Znajdowanie podłańcucha w łańcuchu ---
// Używamy metody find() do znalezienia pozycji podłańcucha "Cześć" w łańcuchu 'message'
size_t found = message.find("Cześć");
if (found != std::string::npos) {
std::cout << "Znaleziono 'Cześć' na pozycji: " << found << std::endl;
}
// --- Wydzielanie fragmentu łańcucha ---
// Używamy metody substr() do wydzielenia części łańcucha 'message' od pozycji 7 i długości 3 znaki
std::string substring = message.substr(7, 3);
std::cout << "Fragment łańcucha: " << substring << std::endl;
// --- Porównywanie łańcuchów ---
// Używamy operatora == do porównania dwóch łańcuchów
if (name == "Kan") {
std::cout << "Imię to 'Kan'" << std::endl;
} else {
std::cout << "Imię nie jest 'Kan'" << std::endl;
}
// --- Zakończenie programu ---
return 0;
}
Jak działa program
Ten program demonstruje podstawowe operacje na łańcuchach znaków w C++. Na początku definiuje dwie zmienne typu std::string
(greeting
i name
). Następnie łączy te łańcuchy za pomocą operatora +
i wyświetla wynik. Program korzysta z różnych metod klasy std::string
, takich jak length()
do uzyskania długości łańcucha, find()
do znalezienia podłańcucha, substr()
do wydzielania fragmentu tekstu oraz operatorów indeksowania ([]
) do dostępu i modyfikacji poszczególnych znaków. Na koniec pokazuje, jak porównać dwa łańcuchy przy użyciu operatora ==
.
Opis działań w kodzie
- Deklaracja i inicjalizacja łańcuchów znaków:
std::string greeting = "Cześć";
– Tworzy zmienną typustd::string
o nazwiegreeting
i przypisuje jej wartość"Cześć"
.std::string name = "Jan";
– Tworzy zmienną typustd::string
o nazwiename
i przypisuje jej wartość"Jan"
.
- Łączenie (konkatenacja) łańcuchów znaków:
std::string message = greeting + ", " + name + "!";
– Łączy trzy łańcuchy znaków, tworząc nową zmiennąmessage
.std::cout << "Wiadomość: " << message << std::endl;
– Wyświetla łańcuchmessage
.
- Pobieranie długości łańcucha:
message.length()
– Zwraca liczbę znaków w łańcuchumessage
.std::cout << "Długość wiadomości: " << message.length() << " znaków" << std::endl;
– Wyświetla długość łańcucha.
- Dostęp do poszczególnych znaków:
name[0]
– Uzyskuje dostęp do pierwszego znaku w łańcuchuname
.name[0] = 'K';
– Modyfikuje pierwszy znak łańcuchaname
.
- Znajdowanie podłańcucha w łańcuchu:
message.find("Cześć")
– Szuka podłańcucha"Cześć"
w łańcuchumessage
. Zwraca pozycję, jeśli znajdzie podłańcuch, lubstd::string::npos
, jeśli nie znajdzie.if (found != std::string::npos) {...}
– Sprawdza, czy podłańcuch został znaleziony, i wyświetla jego pozycję.
- Wydzielanie fragmentu łańcucha:
message.substr(7, 3)
– Wydziela z łańcuchamessage
podłańcuch zaczynający się od pozycji 7 i o długości 3 znaki.std::cout << "Fragment łańcucha: " << substring << std::endl;
– Wyświetla wydzielony fragment łańcucha.
- Porównywanie łańcuchów:
if (name == "Kan") {...}
– Porównuje łańcuchname
z wartością"Kan"
. Wypisuje odpowiedni komunikat w zależności od wyniku porównania.
Program demonstruje, jak łatwo można manipulować tekstem w C++ przy użyciu klasy std::string
. To jedne z najczęściej używanych operacji podczas pracy z danymi tekstowymi w aplikacjach.