Ćwiczenie z bibloteką String. – Bibloteka STRING cz.2

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

Dodaj komentarz