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.
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; }
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; }
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; }
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:
#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; }