C++/String: Różnice pomiędzy wersjami
Zdzichobot (dyskusja | edycje) zamiana ProstaNawigacja->Subst:Naw |
|||
Linia 23: | Linia 23: | ||
cout << napis4; |
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: |
|||
<code>using namespace std;</code> |
|||
Powyższy kod da w wyniku: |
Powyższy kod da w wyniku: |
Wersja z 18:20, 22 maj 2008
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;
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 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 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) |