Łańcuchy tekstowe - String
ZAGADNIENIA
Teksty
Zmienne znakowe – char (apostrofy)
Przykłady poniżej w ramce opisują: deklarowanie i
inicjowanie zmiennej znakowej, operacje dodawania liczby do zmiennej znakowej,
różnicę pomiędzy znakiem ‘0’ liczbą 0 oraz konwersję znaku na liczbę i liczby na znak,
kody ASCII i tzw. rzutowanie.
UWAGA. W języku C++ instrukcja cout << ‘1’+’1’ wyświetli na ekranie liczbę 98 (bo kod
ASCII dla znaku ‘1’ to 49). Wszystkie normalne języki programowania „widząc” znak traktują
go jak znak i można go co najwyżej skleić z innym znakiem, tylko w C++ jest „dziwnie”. Sam
sposób zapisu konwersji znak-liczba też można w C++ „udziwnić”. Typowy sposób to np.
char(liczba). W C++ można dodatkowo (char)65, albo też (char)(65).
char znak; znak='A'; cout << znak; //A //konwersja – znak-liczba cout << znak << int(znak) << endl;//A 65 cout << znak << (int) znak << endl;//A 65 cout << znak << char(65) << endl;//A A //znaki jak liczby!!! cout << znak+0 << znak+1 << endl;//65 66 cout << '1'+'1' << 1+1 << endl; //98 2 |
Konwersja liczby na łańcuch tekstowy za pomoca funkcji to_string(): #include <iostream> #include <string> using namespace std; int main() { int liczba = 123; string tekst = to_string(liczba); cout << tekst << endl; return 0; } |
Konwersja string na typ int pomoca funkcji stoi(): #include <iostream> #include <string> using namespace std; int main() { string liczbaStr = "123"; int liczba = stoi(liczbaStr); cout << liczba << endl; return 0; } |
Konwersja string na typ double pomoca funkcji stod(): #include <iostream> #include <string> using namespace std; int main() { string liczbaStr = "123.123"; double liczba = stod(liczbaStr); cout << liczba << endl; return 0; } |
Przydatne polecenia:
Metoda | Opis |
---|---|
empty() | Zwraca wartość true jeżeli napis jest pusty. |
size(),length() | Zwraca ilość znaków w napisie. |
at() | Zwraca znak o podanym położeniu, tak jak operator [], z tym że ta metoda jest bezpieczniejsza - wyrzuca wyjątek w przypadku wyjścia poza zakres stringa. |
clear() | Usuwa wszystkie znaki z napisu. |
erase(...) | Usuwa wybrane znaki. |
find(...) | Znajduje podciąg w ciągu. |
swap(...) | Zamienia miejscami dwa stringi, a staje się b, a b staje się a. |
substr(...) | Zwraca podciąg na podstawie indeksu początkowego i długości podciągu. |
append(...) | Dodaje zadany napis na końcu istniejącego ciągu. |
c_str() | Zwraca napis w stylu języka C (stały wskaźnik typu const char*). |
W bibliotece standardowej języka C++ nie ma bezpośrednio wbudowanej funkcji reverse() dla typu std::string, która odwracałaby kolejność znaków w ciągu. Jednak istnieje kilka sposobów, aby odwrócić ciąg znaków. Poniżej jeden z nich z zastosowaniem biblioteki <algorithm>
Użycie funkcji std::reverse() z biblioteki <algorithm>:
#include <iostream> #include <algorithm> #include <string> using namespace std; int main() { string tekst = "Hello, World!"; reverse(tekst.begin(), tekst.end()); cout << tekst << endl; return 0; } |
W języku C++ funkcja erase() jest częścią klasy std::string i służy do usuwania znaków z ciągu znaków. Oto przykład zastosowania funkcji erase():
#include <iostream>
#include <string>
int main() {
std::string tekst = "Hello, World!";
// Usunięcie pojedynczego znaku
tekst.erase(7, 1); // Usunięcie znaku o indeksie 7 (indeksowanie od 0)
std::cout << tekst << std::endl; // Wynik: "Hello, orld!"
// Usunięcie zakresu znaków
tekst.erase(2, 5); // Usunięcie znaków od indeksu 2 do 6 (indeksowanie od 0)
std::cout << tekst << std::endl; // Wynik: "He, orld!"
return 0;
}
Rozwiązania do ćwiczeń z tej strony
1 Napisz funkcję ANAGRAM, która zamieni podany jako parametr tekst na jego odwrotność
2 Napisz funkcję, która utworzy tekst złożony z losowego zlepku liter podanych w parametrze
3 Napisz funkcję, która policzy ilość liter w tekście. Jako parametr podajemy tekst i literę
4 Napisz funkcję, która policzy wszystkie litery w tekście – bez spacji
5 Napisz funkcję PALINDROM, która sprawdzi czy wpisany wyraz jest palindromem (czytany od tyłu jest taki sam).
a Zmodyfikuj funkcję aby sprawdzała całe zdania - usuń najpierw spacje z tekstu!
6 Mini szyfrowanie. Napisz funkcję, która zwróci zaszyfrowany tekst. Zasada szyfrowania: kod ASCII każdego znaku zwiększamy o konkretną liczbę
7 Mini szyfrowanie. Napisz funkcję, która zwróci zaszyfrowany tekst. Zasada szyfrowania: przestawiamy znaki w tekście 1-2 3-4 5-6 itd. 8)
8 Napisz funkcję, która zliczy samogłoski (spółgłoski) w tekście
9 Napisz funkcję, która zliczy wyrazy w tekście. Zliczamy spacje +1
10 Dwie duże liczby znajdują się w łańcuchach tekstowych. Wykonaj ich dodawanie.
- Zliczanie wystąpień określonego znaku w ciągu.
- Zamiana wszystkich liter w ciągu na małe lub duże.
- Sprawdzanie, czy dwa ciągi znaków są anagramami.
- Wyodrębnianie fragmentu ciągu na podstawie indeksów.
- Usuwanie białych znaków (spacji, tabulatorów) z ciągu.
- Podział ciągu na podstawie określonego znaku lub ciągu separatorów.
- Sprawdzanie, czy ciąg jest palindromem (czy czyta się tak samo od przodu i od tyłu).
- Zamiana liczby na odpowiadający jej ciąg znaków w innej podstawie (np. liczby binarne, szesnastkowe).
- Zastępowanie określonego podciągu w ciągu innym podciągiem.
- Porównywanie dwóch ciągów znaków leksykograficznie (alfabetycznie).
- Wyznacz długość danego ciągu znaków.
- Odwróć kolejność znaków w ciągu.
- Sprawdź, czy dany ciąg jest palindromem.
- Zamień określony podciąg w ciągu na inny podciąg.
- Zamień wszystkie wystąpienia określonego znaku w ciągu na inny znak.
- Złącz dwa ciągi znaków w jeden.
- Podziel ciąg na podstawie określonego znaku lub ciągu separatorów.
- Zamień wszystkie litery w ciągu na duże lub małe.
- Usuń wszystkie wystąpienia określonego znaku z ciągu.
- Sprawdź, czy dany ciąg zawiera określony podciąg.