C++/String: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Nie podano opisu zmian |
poprawki |
||
Linia 1:
== String ==
Aby móc korzystać z klasy <tt>string</tt> należy dołączyć plik nagłówkowy:
<source lang="cpp">
#include <string>
</source>
Tworzenie nowych obiektów tego typu wygląda następująco:
<source lang="cpp">
string napis1;
napis1 = "text";
</source>
Uwaga:<br />
Aby kompilator widział typ
<
lub ogólnie:
<
Klasa string ma zdefiniowanych wiele operatorów, co ułatwia niektóre działania na napisach. Dla przykładu, dawniej aby skopiować napis z jednej zmiennej do drugiej, trzeba było używać dodatkowej funkcji <tt>strcpy()</tt>. W przypadku klasy <tt>string</tt> wystarczy operator przypisania '=' :
<source lang="cpp">
string a, b;
a = '1';
b = '2';
a = b;
cout << a;
</source>
Możemy z powodzeniem używać także operatorów: ==, !=, +, <, > oraz indeksowego []:
<source lang="cpp">
string a,b,c;
a = "gosia";
b = "iza";
c = "gosia";
// porównywanie napisów
if (a == c) cout << "a i c sa takie same\n";
if (a != b) cout << "a i b sa rozne\n" ;
// porządek leksykograficzny
cout << "napis a ("<<a<<") poprzedza napis b("<<b<<"): ";
if (a < b) cout << "prawda\n";
else cout << "nieprawda\n";
// łączenie łańcuchów
cout << "napis a ("<<a<<") poprzedza napis b("<<b<<"): ";
if (a < b) cout << "prawda\n";
else cout << "nieprawda\n";
// modyfikacja
b[0] = '_';
cout << "zmieniony wyraz b: "<<b<<'\n';
</source>
Po czym w konsoli zobaczymy:
a i c sa takie same
a i b sa rozne
napis a (gosia) poprzedza napis b(iza): prawda
napis a (malgosia) poprzedza napis b(iza): nieprawda
zmieniony wyraz b: _za
Jak widać, manipulacje obiektami <tt>string</tt> są intuicyjne. Oprócz wygodnych w stosowaniu operatorów, klasa string posiada jeszcze więcej metod.
<table weight="100%" border="0" cellspacing="3" cellpadding="6px" >
Linia 93 ⟶ 88:
<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 bezpieczniejsza, zapobiega wyjściu poza zakres.</td></tr>
<tr><td><tt>clear
<tr><td><tt>erase(...)</tt></td><td>clear() 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>swap(...)</tt></td><td>Zamienia miejscami dwa stringi, a staje się b, a b staje się a.</td></tr>
<tr><td><tt>substr(
<tr><td><tt>append(...)</tt></td><td>Dodaje zadany napis na końcu istniejącego ciągu.</td></tr>
<tr><td><tt>c_str()</tt></td><td>Zwraca napis w stylu języka C (stały wskaźnik
</table>
{{TODO|omówić wymienione wyżej metody}}
Omówione dotychczas operatory i metody to tylko część dostępnych; wymienione zostały tylko te najczęściej używane. Teraz przedstawię różnice jakie występują między C a C++ w obsłudze napisów.
<table border="0" cellspacing="3" cellpadding="6px" >
<tr><td><b>C</b></td><td><b>C++</b></td></tr>
<tr><td><tt>strcpy(a,b) </tt></td><td><tt> a = b</tt></td></tr>
Linia 113 ⟶ 111:
<noinclude>
{{Nawigacja|C++|
[[C++:Filozofia STL|Filozofia STL]]|
|