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

Z Wikibooks, biblioteki wolnych podręczników.
< C++
Usunięta treść Dodana treść
m usunięcie kategorii
Linia 82: Linia 82:
<tr><td><tt>empty()</tt></td><td>Zwraca wartość true jeżeli napis jest pusty.</td></tr>
<tr><td><tt>empty()</tt></td><td>Zwraca wartość true jeżeli napis jest pusty.</td></tr>
<tr><td><tt>size(),length()</tt></td><td>Zwraca ilość znaków w napisie.</td></tr>
<tr><td><tt>size(),length()</tt></td><td>Zwraca ilość znaków w napisie.</td></tr>
<tr><td><tt>at()</tt></td><td>Zwraca znak o podanym położeniu, podobnie jak operator [] z tym że ta metoda jest bardziej bezpieczna, zapobiega wyjściu poza zakres.</td></tr>
<tr><td><tt>at()</tt></td><td>Zwraca znak o podanym położeniu, podobnie jak operator [] z tym że ta metoda jest bezpieczniejsza, zapobiega wyjściu poza zakres.</td></tr>
<tr><td><tt>clear(),erase()</tt></td><td>Usuwa wszystkie znaki z napisu, erase() może usuwać wybrane znaki.</td></tr>
<tr><td><tt>clear(),erase()</tt></td><td>Usuwa wszystkie znaki z napisu, erase() może usuwać wybrane znaki.</td></tr>
<tr><td><tt>find()</tt></td><td>Znajduje podciąg w ciągu, są też bardziej rozbudowane funkcje tego typu.</td></tr>
<tr><td><tt>find()</tt></td><td>Znajduje podciąg w ciągu, są też bardziej rozbudowane funkcje tego typu.</td></tr>
Linia 90: Linia 90:
</table>
</table>


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 w stosowaniu napisów w bibliotekach języka C a C++.
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.


<table weight="100%" border="0" cellspacing="3" cellpadding="6px" >
<table weight="100%" border="0" cellspacing="3" cellpadding="6px" >
Linia 98: Linia 98:
<tr><td><tt>strcat(a,b) </tt></td><td><tt> a += b</tt></td></tr>
<tr><td><tt>strcat(a,b) </tt></td><td><tt> a += b</tt></td></tr>
<tr><td><tt>strlen(a) </tt></td><td><tt> a.size()</tt></td></tr>
<tr><td><tt>strlen(a) </tt></td><td><tt> a.size()</tt></td></tr>
<tr><td><tt>stestr(a,b) </tt></td><td><tt> a.find(b)</tt></td></tr>
<tr><td><tt>strstr(a,b) </tt></td><td><tt> a.find(b)</tt></td></tr>
</table>
</table>



Wersja z 16:03, 9 lut 2007

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 (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 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 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.

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


Szablon:ProstaNawigacja