Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Kurs C++

Biblioteka <string>

[lekcja] Dokument opisuje jak się korzysta z klasy std::string.

Bardziej profesjonalne podejście do tekstu

Jak już wspomniałem język C++ był rozwijany latami i między innymi efektem tych prac jest biblioteka string. Do tej pory wczytywanie tekstu wiązało się z koniecznością podawania maksymalnej długości tekstu, jaki może być wczytany. Klasa ta daje dużo większe możliwości i eliminuje ten problem z życia codziennego programisty.

Co to jest klasa

Klasa to bardziej złożony typ danych, posiadający własne zmienne i funkcje. Większe szczegóły nie są na tym etapie Tobie potrzebne.

Jak korzystamy z klasy string

Klasa string, umieszczona jest w przestrzeni nazw std::. Nazwa string stanowi typ zmiennej. Deklaracja zmiennej wygląda więc następująco:
C/C++
std::string nazwa_zmiennej;
Wczytywanie i zapisywanie tekstu za pomocą cin i cout odbywa się dokładnie tak samo, jak w przypadku zwykłej zmiennej. Skoro jednak można wczytać dowolnie długi tekst może się pojawić w tym miejscu nurtujące pytanie: jakiego rozmiaru jest ta zmienna i ile pamięci pochłania? Odpowiedź jest napawająca optymizmem i brzmi następująco: zmienna zajmuje niewiele więcej bajtów, niż długość tekstu. Jak to się dzieje? Klasa string dynamicznie zarządza danymi i alokuje bądź zwalnia sobie pamięć w zależności od potrzeb. Programista może się cieszyć prostotą użycia tej klasy, a klasa string wykonuje za niego brudną robotę.

Poznajemy klasę string

Jak zapewne już zauważyłeś funkcje, których używałeś do sprawdzania długości tekstu, czy też do wczytania tekstu za pomocą gets nie działają dla typu string. Ponieważ klasa zarządza dynamicznie pamięcią to również w tym celu zostały stworzone odpowiednie funkcje, dostosowane do takiego podejścia do tekstu.

Sprawdzamy długość tekstu

Aby sprawdzić długość tekstu jaki znajduje się w zmiennej string, musimy wywołać funkcję, która znajduje się wewnątrz klasy string. Zadanie to może brzmieć strasznie, ale jak zobaczysz jest to bardzo prosta i wygodna sprawa. Oto przykład:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    string wyraz;
    cout << "Podaj tekst: ";
    cin >> wyraz;
    cout << "Wprowadziles: \"" << wyraz << "\"" << endl;
    cout << "Długosc wyrazu: " << wyraz.length() << endl;
    getch();
    return( 0 );
}
Jak widać, wywołanie funkcji length(), znajdującej się wewnątrz klasy string spowodowało wypisanie długości zmiennej z której nastąpiło wywołanie. Tutaj wywołaliśmy tą funkcję dla zmiennej wyraz.

Wczytywanie wiersza znaków

W celu wczytania wiersza znaków, tym razem posłużymy się funkcją std::getline. Funkcja przyjmuje trzy parametry. Pierwszym z nich jest strumień, z którego dane mają zostać wczytane. Do drugiego parametru podajemy nazwę zmiennej typu string, do której dane mają zostać zapisane. Trzeci parametr jest opcjonalny. Informuje on o tym kiedy ma zakończyć się wczytywanie danych (jaki znak oznacza koniec wczytywania danych) i domyślnie przyjmowaną wartością dla tego parametru jest '\\n', czyli znak końca lini (enter). Przykład:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    string wyraz;
    cout << "Podaj tekst: ";
    getline( cin, wyraz );
    cout << "Wprowadziles: \"" << wyraz << "\"" << endl;
    cout << "Długosc wyrazu: " << wyraz.length() << endl;
    getch();
    return( 0 );
}

Łączenie tekstów

Klasa string ma bardzo wiele pożytecznych i wygodnych funkcji. Jednak oprócz tego posiada jeszcze jedną bardzo ważną i wygodną własność: łatwe łączenie tekstów ze sobą. Jeśli mamy dwie lub więcej zmiennych typu string i chcemy je połączyć tak, aby dostać zmienną w której będziemy mieli wszystkie teksty połączone razem wystarczy wykorzystać do tego operator matematyczny +. Poniższy przykład demonstruje tą własność.
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    string wyraz, nastepny, wynik;
    cout << "Podaj tekst: ";
    getline( cin, wyraz );
    cout << "Podaj drugi tekst: ";
    getline( cin, nastepny );
    wynik = wyraz + " wlasny napis " + nastepny;
    cout << "Polaczony tekst to: \"" << wynik << "\"" << endl;
    cout << "Długosc tekstu: " << wynik.length() << endl;
    getch();
    return( 0 );
}

Podsumowanie rozdziału

Informacje jakie znalazły się w tym rozdziale są tak naprawdę wstępem do klasy string i jej wykorzystywania. Wiadomości te powinieneś poszerzać we własnym zakresie w miarę potrzeb. W tym kursie opisuję tylko te funkcje, które wydają mi się najbardziej użyteczne i są najczęściej wykorzystywane przez programistów.
Poprzedni dokument Następny dokument
Typ wyliczeniowy enum Obsługa klawiatury za pomocą <conio.h>