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

1
2
3
4
5
6
7
8
9
10
11
12
13
// Wykorzystanie tablicy. wyswietlenie napisu Kaska
 
#include<iostream>
#include<string>
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 :

1
2
3
4
5
6
7
8
9
//Test funkcji substr
#include<iostream>
#include<string>
using namespace std;
int main(){
    string a("Chandler");
    cout<<a.substr(2,3)<<endl; // wypisze and
system("PAUSE");
return 0; }

—————————————————

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.

1
2
3
4
5
6
7
8
9
10
11
// Funkcja size_type copy
#include<iostream>
#include<string>
using namespace std;
int main(){
    char a[] = "Monica";
    string b("Joeyy");
    string::size_type siz = b.copy(a,3,2);
    cout<<"Skopiowano "<<siz<<" znaki:\n"<<a<<endl; // Wyswietli "eyyic"
system("PAUSE");
return 0; }

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

1
2
3
4
5
6
7
8
9
10
11
//zamienia napis s1 z wybranym na rzecz swap
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s("911"), s1("Lot");
    s.swap(s1);
    cout<<s<<" "<<s1<<endl; // Wyswietli Lot 911
    cout<<s1<<" "<<s<<endl; // Wyswietli 911 Lot
system("PAUSE");
return 0; }

—————————————————
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:

1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s1("0123456781"), s2;
    const char* p = "012345526";
    s1.assign(s1,3,5);
    s2.assign(p,  5);
    cout<<s1<<" "<<s2<<endl;
system("PAUSE");
return 0; }

—————————————————
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'.

1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s1("01234567"), s2;
    const char* p = "012345";
    s1.assign(5, 's');
    s2.assign(p+3, p+5); 
    cout<<s1<<" "<<s2<<endl;
system("PAUSE");
return 0; }

Na razie koniec, więcej będę pisał w następnej części.
Tak pozatym Word count: 666. 😛