C++/String: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
< C++
Usunięta treść Dodana treść
Kj (dyskusja | edycje)
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.

MetodaOpis
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++.

CC++
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)

Szablon:ProstaNawigacja