22.6 — std::string: dopisywanie

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.
guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
38 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze