Strukturalne typy danych — typ łańcuchowy.

operacje na string


Klasa jest to zbiór zmiennych i metod, które są ze sobą logicznie powiązane. Klasy często przypominają czarne skrzynki, które potrafią zrealizować określone zadania. Zadania te można wykonywać zazwyczaj tylko i wyłącznie poprzez wywoływanie metod, które należą do obiektu. Klasa tylko i wyłącznie określa jakie zmienne i metody są w niej dostępne oraz określa ich działanie. Można powiedzieć, że klasa jest to własny typ danych o złożonej budowie i tak należy rozumieć znaczenie tego słowa.

Przykładem klasy jest string chociaż nazywanie narzędzia string klasą nie jest do końca prawidłowym stwierdzeniem - w rzeczywistości string jest aliasem wskazującym na znacznie bardziej zaawansowany twór języka C++

Obiekt to byt programistyczne określony przez swoje cechy. Można też napisać, że jest to zmienna, której typem jest klasa.

Metodami nazywamy funkcje, które należą do obiektu.

Jak się wywołuje metody?
nazwa_zmiennej.nazwa_metody();

Zmienna musi oczywiście być obiektem, a obiekt musi posiadać metodę by było możliwe jej wywołanie.

Sprawdzanie długości tekstu

Do sprawdzania długości tekstu służą dwie metody klasy string. Tymi metodami są: size oraz length. Metoda length zwraca tą samą wartość. W programowaniu współczesnym zaleca się aby używać metody size do odczytywania długości tekstu, a metodę length uważa się na dzień dzisiejszy za przeżytek. Metoda length pozostała standardzie C++ ze względów historycznych i zaleca się unikać używania wspomnianej metody w nowo pisanych aplikacjach. Oto krótki przykład prezentujący działanie metody size oraz length:

#include <iostream>
#include <string>

using namespace std;
int main()
{
    std::string sNapis = "To jest napis";
    std::cout << "Napis: " << sNapis <<endl;
    std::cout << "Dlugosc napisu to (metoda size): " << sNapis.size() << endl;
    std::cout << "Dlugosc napisu to (metoda length): " << sNapis.length() << endl;
    return 0;
}

Długość tekstu to liczba znaków występujących w tekście.

Łączenie tekstów


Klasa string umożliwia nam sklejanie tekstów. Do sklejania tekstu można wykorzystać przeciążony operator += bądź wywołać metodę append - w obu przypadkach tekst zostanie doklejony na końcu już istniejącej treści. Przykład:

#include <iostream>
#include <string>

using namespace std;
int main()
{
	string tekst = "abc";
	tekst += "def";
	tekst.append( "ghi" );
	<< tekst; //zostanie wypisany tekst: abcdefghi
    return 0;
}

Wstawianie treści w dowolnym miejscu tekstu

Klasa string umożliwia również wstawianie nowej treści w dowolnym miejscu istniejącego tekstu - do tego celu wykorzystuje się metodę insert. Metoda ta posiada wiele wersji wywołań. Tutaj zostanie podana wersja opisana w podręcznku.
Pierwszym argumentem wspomnianej metody jest pozycja na której ma zostać wstawiony nowy tekst. Pozycja ta jest numerem znaku przed którym ma zostać dopisana nowa treść (pamiętaj, że pozycje są numerowane od zera). Drugim argumentem jest treść, która ma zostać dopisana we wskazanym miejscu do już istniejącego tekstu. Przykład:

#include <iostream>
#include <string>

using namespace std;
int main()
{
	string tekst = "abc";
	tekst.insert( 1, "def" );
	cout << tekst <<endl; //zostanie wypisany tekst: adefbc
    return 0;
}

Usuwanie wybranego fragmentu tekstu

Operację usuwania tekstu możemy wykonać za pomocą kilku metod jakie udostępnia nam klasa string. Metodą najprostszą i jednocześnie najbardziej praktyczną z punktu widzenia programu szkolnego jest metoda erase. Metoda erase ma następującą postać:

string & erase( size_type pozycja, size_type liczba_znakow );

Pierwszym argumentem w powyższej metodzie jest pozycja od której chcemy kasować znaki (znaki numerujemy od zera). Drugim argumentem jest liczba znaków, które chcemy usunąć z tekstu. Usuwając tekst należy pamiętać aby pozycja pierwszego znaku była prawidłowa, czyli nie była większa lub równa liczbie znaków występujących w tekście. Przykład:

#include <iostream>
#include <string>

using namespace std;
int main()
{
	string sNapis = "[Kurs C++] string - Modyfikowanie tekstu.";
    sNapis.erase( 10, 5 ); //Kasujemy od dziesiątej pozycji (czyli jedenastego znaku) czternaście znaków
    std::cout << sNapis << endl;
	return 0;
}

Kopiowanie tekstu

Klasa string do kopiowania tekstu posiada metodę copy. Metoda copy nie zostanie jednak omówiona, bowiem jest ona po pierwsze niewygodna(uznawana za przestarzałą). Praktycznym narzędziem jest metoda insert

#include <iostream>
#include <string>

using namespace std;
int main()
{
	string sNapis = "[Kurs C++] string - Kopiowanie tekstu.";
    string sDrugiNapis;
    sDrugiNapis.insert( 0, sNapis ); //Wstaw przed pozycją zero tekst z obiektu sNapis
    std::cout << sDrugiNapis << std::endl;
	return 0;
}

Możn akopiować tekst ze zmiennej z określeniem ilości kopiowanych znaków. Zmienne pierwsza i drugasą już znane zmetody insert, natomiast argument trzeci określa pozycję od którego znaku należy kopiować tekst, a argument czwarty ile maksymalnie znaków ma zostać skopiowanych. Przykład:

Wyszukiwanie tekstu

  • typ string::size_type, zwykle tożsamy z typem unsigned. Tego typu są długości napisów i podnapisów. Jeśli w programie jawnie używamy nazwy tego typu (co rzadko bywa niezbędne), może być konieczne kwalifikowanie jej nazwą klasy, a więc należy pisać string::size_type. stałą string::npos, równą największej możliwej wartości typu string::size_type. Żaden napis nie może mieć takiej długości, wobec tego wartość ta jest wykorzystywana jako sygnalizator błędów albo wartość domyślna oznaczająca tyle znaków ile się da.

    Przykład:

    #include <iostream>
    #include <string>
    
    using namespace std;
    int main()
    {
    	string sNapis = "Ala ma kota";
        string szukaj = "kot";
        size_t pozycja = sNapis.find(szukaj); //sprawdza czy łańcuch "szukaj" znajduje się w łańcuchu sNapis.
        
    	if (pozycja!=string::npos)
    		cout << "Znaleziono na pozycji: " << pozycja;
    	else
    		cout << "Nie znaleziono "<< std::endl;
    	return 0;
    }