Dołączanie
Dołączanie ciągów na końcu istniejącego ciągu jest łatwe przy użyciu operatora+=, append() lub push_back().
string& string::operator+= (const string& str) string& string::append (const string& str)
- Obie funkcje dołączają znaki str do łańcucha.
- Obie funkcje zwracają *to, aby można było je „połączyć”.
- Obie funkcje zgłaszają wyjątek dotyczący długości_błędu, jeśli wynik przekracza maksymalną liczbę znaków.
Przykładowy kod: std::string sString{"one"};
sString += std::string{" two"};
std::string sThree{" three"};
sString.append(sThree);
std::cout << sString << '\n';
Wyjście: one two three
|
Istnieje również wersja append(), która może dołącz podciąg:
string& string::append (const string& str, size_type indeks, size_type num)- Ta funkcja dołącza num znaków z str, zaczynając od indeksu, do łańcucha.
- Zwraca *to, aby można było je „połączyć”.
- Wyrzuca out_of_range, jeśli indeks jest poza zakresem
- Zgłasza wyjąteklength_error, jeśli wynik przekracza maksymalną liczbę znaków.
Przykładowy kod: std::string sString{"one "};
const std::string sTemp{"twothreefour"};
sString.append(sTemp, 3, 5); // append substring of sTemp starting at index 3 of length 5
std::cout << sString << '\n';
Wyjście: one three
|
Operator+= i append() również mają wersje, które działają na ciągach w stylu C:
string& string::operator+= (const char* str) string& string::append (const char* str)
- Obie funkcje dołączają znaki str do łańcucha.
- Obie funkcje zwracają *to, aby można było je „połączyć”.
- Obie funkcje zgłaszają wyjątek dotyczący długości_błędu, jeśli wynik przekracza maksymalną liczbę znaków.
- str nie powinno być NULL.
Przykładowy kod: std::string sString{"one"};
sString += " two";
sString.append(" three");
std::cout << sString << '\n';
Wyjście: one two three
|
Istnieje dodatkowa wersja metody append(), która działa na ciągach w stylu C:
string& string::append (const char* str, size_type len)
- Dołącza pierwsze znaki len str do łańcucha.
- Zwraca *to, aby można było je „połączyć”.
- Throw wyjątek długości_błędu, jeśli wynik przekracza maksymalną liczbę znaków.
- Ignoruje znaki specjalne (w tym ”)
Przykładowy kod: std::string sString{"one "};
sString.append("threefour", 5);
std::cout << sString << '\n';
Wyjście: one three
Ta funkcja jest niebezpieczna i jej użycie nie jest zalecane. |
Istnieje również zestaw funkcji, które dołączają znaki. Należy pamiętać, że nazwa funkcji nieoperacyjnej służącej do dołączenia znaku to push_back(), a nie append()!
string& string::operator+= (char c) void string::push_back (char c)
- Obie funkcje dołączają znak c do łańcucha.
- Operator += zwraca *to, aby można było je „połączyć”.
- Obie funkcje zgłaszają wyjątek dotyczący długości_błędu, jeśli wynik przekracza maksymalną liczbę znaków.
Przykładowy kod: std::string sString{"one"};
sString += ' ';
sString.push_back('2');
std::cout << sString << '\n';
Wyjście: one 2
|
Teraz możesz się zastanawiać, dlaczego nazwa funkcji to push_back(), a nie append( konwencja nazewnictwa stosowana dla stosów, gdzie push_back() jest funkcją, która dodaje pojedynczy element na koniec stosu. Jeśli wyobrażasz sobie ciąg znaków jako stos znaków, użycie funkcji push_back() w celu dodania pojedynczego znaku na końcu ma sens. Jednakże brak funkcji append() jest moim zdaniem niespójny!
Okazuje się, że istnieje funkcja append() dla znaków, która wygląda tak:
string& string::append (size_type num, char c)
- Dodaje liczbę wystąpień znaku c do ciągu
- Zwraca *to, aby można było je „połączyć”.
- Zgłasza wyjąteklength_error, jeśli wynik przekracza maksymalną liczbę znaków.
Przykładowy kod: std::string sString{"aaa"};
sString.append(4, 'b');
std::cout << sString << '\n';
Wyjście: aaabbbb
|
Istnieje jeszcze jedna wersja append(), która działa z iteratorami:
string& string::append (InputIterator początek, WejścieIterator koniec)
- Dołącza wszystkie znaki z zakresu [start, end) (łącznie z początkiem i bez końca)
- Zwraca *to, aby można było je „połączyć”.
- Zgłasza wyjąteklength_error, jeśli wynik przekracza maksymalną liczbę znaków.
|