.. Dalsza część tego co wczoraj próbowałem opanować.
( Będzie łatwiej to przeczytać. )
Wykorzystując tablice możemy stworzyć coś ciekawego, np. zamienić litery w słowie.
Efekt poniżej. Sprawa całkiem prosta.
// Wykorzystanie tablicy. wyswietlenie napisu Kaska
#include
#include
using namespace std;
int main(){
string s("Baska");
s[0] = 'K';
for ( int i = 0; i < 5; i++ ) cout << s[i];
system("PAUSE");
return 0;
}
---------------------------------------------------
string substr(size_type start = 0, size_type ile = npos)
- zwraca napis będący podciągiem napisu na rzecz którego metoda została wywołana.
Podciąg składa się ze znaków od pozycji start i liczy ile znaków.
Jeśli start+ile jest większe niż długość napisu, to błędu nie ma;
do podciągu brane są wszystkie znaki napisu od tego na pozycji start.
Na przykład :
string s("Pernambuco");
cout << s.substr(5,3) << endl;
wypisze ' mbu'.
Podajemy string, w tym wypadku "Pernambuco", a poniżej wywołując funkcję substr wybieramy co ma zostać wyświetlone, 5 od początku(Perna, uwzględniamy następną litere czyli M .. ), a po przecinku piszemy ile liter ma zostać wyświetlone( Po tych 5 literach ). - Trochę chaotycznie, jednak wszystko wyjdzie po kompilacji 😉
Mój test :
//Test funkcji substr
#include
#include
using namespace std;
int main(){
string a("Chandler");
cout<
---------------------------------------------------
size_type copy(char cn[], size_type ile, size_type start = 0)
- kopiuje do C-napisu cn podciąg złożony z ile znaków, poczynając od tego na pozycji start.
Zwraca liczbę przekopiowanych znaków. Znak ' \0' nie jest dostawiany.
Zwróćmy uwagę na kolejność argumentów start i ile - odwrotną niż w metodzie substr.
Na przykład:
char nap[] = "xxxxxx";
string s("Barbara");
string::size_type siz = s.copy(nap,3,2);
cout << "Skopiowano " << siz << " znaki: \n"
<< nap << endl;
wypisze ' Skopiowano 3 znaki: rbaxxx'.
Tak jak podaje to opis wyżej, odwrotna metoda niż w substr, tutaj dodatkowo możemy dodać opis - ile znaków skopiowaliśmy. //s.copy(nap,3,2) - Skopiuj 3 litery zaczynając od 2.//
Używamy tak jak poprzednio string'a + wskazujemy na nasz napis, który wcześniej zadeklarowaliśmy.
Dobra koniec tego, trochę potestujmy.
b.copy(a,3,2)
// char a
Kopiuję 2-litery, licząc od 3 czyli ic
// string b
Kopiuje 3 litery licząc od 2 czyli eyy.
Trochę tak na odwrót, ale mniej więcej idzie się w tym połapać. Poniżej mój test.
// Funkcja size_type copy
#include
#include
using namespace std;
int main(){
char a[] = "Monica";
string b("Joeyy");
string::size_type siz = b.copy(a,3,2);
cout<<"Skopiowano "<
---------------------------------------------------
void swap(string s1)
- zamienia napis s1 z tym, na rzecz którego metodę wywołano.
Na przykład:
string s("Arles"), s1("Berlin");
s.swap(s1);
cout << s << " " << s1 << endl;
wypisze ' Berlin Arles'.
Teoretycznie nie widze jakoś zastosowania dla tej funkcji ?? Równie dobrze możemy dobrze ustawić stringi s1, s.
//zamienia napis s1 z wybranym na rzecz swap
#include
#include
using namespace std;
int main(){
string s("911"), s1("Lot");
s.swap(s1);
cout<
---------------------------------------------------
string& assign(const string& wzor)
string& assign(const char* wzor)
string& assign(string wzor, size_type start, size_type ile)
string& assign(const char* wzor, size_type ile)
string& assign(size_type ile, char c)
string& assign(const char* start, const char* kon)
- ustala zawartość napisu i zwraca odniesienie do niego (zastępuje operator przypisania).
Argumenty mają podobną postać jak dla konstruktorów.
W ostatniej metodzie typem argumentów może być iterator wskazujący na znaki:
na przykład są to po prostu wskaźniki do znaków C-napisu.
W najprostszym przypadku argumentem jest inny napis w postaci napisu C++ lub C-napisu;
tak więc po
string s1("xxx"), s2("Zuzia");
s1.assign(s2);
s2.assign("Kasia");
wartością s1 będzie ' Zuzia' a zmiennej s2 ' Kasia'.
Tak jak dla konstruktorów, jako argument można podać podnapis napisu C++ o podanej pozycji początku i długości - za duża długość znaczy aż do końca.
Można też podać podnapis C-napisu złożony z podanej liczby znaków licząc od początku:
#include
#include
using namespace std;
int main(){
string s1("0123456781"), s2;
const char* p = "012345526";
s1.assign(s1,3,5);
s2.assign(p, 5);
cout<
---------------------------------------------------
Za pomocą metody assign można utworzyć napis złożony z ile powtórzeń znaku (piąta forma z wymienionych powyżej).
Można też użyć wskaźników do znaków w C-napisie jako iteratorów wyznaczających podciąg;
trzeba tylko pamiętać, że wskazywany podnapis nie zawiera wtedy znaku wskazywanego jako górne ograniczenie podciągu:
string s1("0123456789"), s2;
const char* p = "0123456789";
s1.assign(5,'x');
s2.assign(p+3,p+5);
cout << s1 << " " << s2 << endl;
wypisze ' xxxxx 34'.
#include
#include
using namespace std;
int main(){
string s1("01234567"), s2;
const char* p = "012345";
s1.assign(5, 's');
s2.assign(p+3, p+5);
cout<
Na razie koniec, więcej będę pisał w następnej części.
Tak pozatym Word count: 666. 😛