C++/String
Z Wikibooks, biblioteki wolnych podręczników.
[edytuj] String
Napisy w stylu języka C są częstą przyczyną błędów a na dodatek ich używanie jest dosyć kłopotliwe. Nic wiec dziwnego że biblioteka standardowa posiada zaimplementowaną uogólnioną klasę napisów zwaną string. Taka klasa daje jednolity, niezależny od systemu i bezpieczny interfejs do manipulowania napisami.
Aby móc korzystać z klasy string należy dołączyć plik nagłówkowy:
#include <string>
Tworzyć nowe obiekty tego typu możemy następująco:
string napis1;
napis1 = "text";
string napis2( "text" );
string napis3 = "text";
cout << napis1 << endl
<< napis2 << endl
<< napis3 << endl;
string napis4(10,'X');
cout << napis4;
Uwaga: Aby kompilator widział typ "string" należy powiadomić go, w jakiej przestrzeni nazw ten typ się znajduje, np. w ten sposób:
using namespace std;
lub bardziej elegancko i bezpieczniej:
using std::string;
Powyższy kod da w wyniku:
text text text XXXXXXXXXX
Klasa string ma zdefiniowanych bardzo wiele operatorów, co ułatwia niektóre działania na napisach. Dla przykładu dawniej aby skopiować napis do innego z napisu trzeba było używać funkcji strcpy(). W implementacji klasy string wystarczy operator przypisania '=' :
string a, b; a = '1'; b = '2'; a = b; cout << a;
Mamy też takie operatory jak ==, !=, + i indeksowy []:
string a,b,c;
a = "Europa";
b = "Afryka";
c = "Europa";
if (a == c)
cout << "takie same\n";
if (a > b)
cout << "napis a jest wiekszy\n";
else
cout << "napis a nie jest wiekszy\n";
b = b + 'a';
if (a > b)
cout << "napis a jest wiekszy\n";
else
cout << "napis a nie jest wiekszy\n";
if (a != b)
cout << "rozne\n" ;
b[0] = '_';
cout << b;
Po czym w konsoli zobaczymy:
takie same napis a jest wiekszy napis a jest wiekszy rozne _frykaa
Jak widać manipulacje obiektami string są bardzo wygodne. Oprócz wygodnych w stosowaniu operatorów klasa string posiada jeszcze więcej metod.
| 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, podobnie jak operator [] z tym że ta metoda jest bezpieczniejsza, zapobiega wyjściu poza zakres. |
| clear(),erase() | Usuwa wszystkie znaki z napisu, erase() może usuwać wybrane znaki. |
| find() | Znajduje podciąg w ciągu, są też bardziej rozbudowane funkcje tego typu. |
| swap() | Zamienia miejscami dwa stringi, a staje się b, a b staje się a. |
| substr( int start_index, int długość ) | 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 do pierwszego elementu). |
Omówione dotychczas operatory i metody to tylko część dostępnych, tu wymieniłem tylko te najczęściej używane. Teraz przedstawię różnice jakie występują między bibliotekami C a C++ w obsłudze napisów.
| C | C++ |
| strcpy(a,b) | a = b |
| strcmp(a,b) | a == b |
| strcat(a,b) | a += b |
| strlen(a) | a.size() |
| strstr(a,b) | a.find(b) |