C++/String: Różnice pomiędzy wersjami
m + kat. nav. |
usuniecie dublującej nawigacji |
||
Linia 1: | Linia 1: | ||
<noinclude><small>< [[C++]]</small></noinclude> |
|||
== String == |
== String == |
||
Wersja z 13:20, 8 paź 2006
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;
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 (b > a) 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 nie 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 bardziej bezpieczna, 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 sie b, a b staje sie a. |
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 chciałbym przedstawić różnice jaki są w stosowaniu napisów w bibliotekach języka C a C++.
C | C++ |
strcpy(a,b) | a = b |
strcmp(a,b) | a == b |
strcat(a,b) | a += b |
strlen(a) | a.size() |
stestr(a,b) | a.find(b) |