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::stringo nazwiegreetingi przypisuje jej wartość"Cześć".std::string name = "Jan";– Tworzy zmienną typustd::stringo nazwienamei 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ńcuchamessagepodł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ńcuchnamez 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.
