22,5 — std::string przypisanie i zamiana

Przypisanie ciągu

Najłatwiejszym sposobem przypisania wartości do łańcucha jest użycie przeciążonej funkcji operator=. Istnieje również funkcja członkowska przypisania(), która powiela część tej funkcjonalności.

string& string::operator= (const string& str)
string& string:: przypisania (const string& str)
string& string::operator= (const char* str)
string& string::przypisz (const char* str)
string& string::operator= (char c)

  • Te funkcje przypisują do łańcucha wartości różnych typów.
  • Te funkcje zwracają *to, dzięki czemu można je „połączyć”.
  • Pamiętaj, że nie ma funkcji przypisania(), która pobiera pojedynczy znak.

Przykładowy kod:

std::string sString;

// Assign a string value
sString = std::string("One");
std::cout << sString << '\n';

const std::string sTwo("Two");
sString.assign(sTwo);
std::cout << sString << '\n';

// Assign a C-style string
sString = "Three";
std::cout << sString << '\n';

sString.assign("Four");
std::cout << sString << '\n';

// Assign a char
sString = '5';
std::cout << sString << '\n';

// Chain assignment
std::string sOther;
sString = sOther = "Six";
std::cout << sString << ' ' << sOther << '\n';

Wyjście:

One
Two
Three
Four
5
Six Six

Funkcja członkowska przypisania() również występuje w kilku wersjach inne wersje:

string& string::przypis (const string& str, size_type indeks, size_type len)

  • Przypisuje podciąg str, zaczynając od indeksu i o długości len
  • Zgłasza wyjątek out_of_range, jeśli indeks jest poza zakresem
  • Zwraca *to, aby można było je „połączyć”.

Przykładowy kod:

const std::string sSource("abcdefg");
std::string sDest;

sDest.assign(sSource, 2, 4); // assign a substring of source from index 2 of length 4
std::cout << sDest << '\n';

Wyjście:

cdef

string& string::przypisz (const char* chars, size_type len)

  • Przypisuje len znaków z tablicy znaków w stylu C
  • Zgłasza wyjąteklength_error, jeśli wynik przekracza maksymalną liczbę znaków
  • Zwraca *to, aby można było je „połączyć”.

Przykładowy kod:

std::string sDest;

sDest.assign("abcdefg", 4);
std::cout << sDest << '\n';

Wyjście:

abcd

Ta funkcja jest potencjalnie niebezpieczna i jej użycie nie jest zalecane.

string& string::przypisz (size_type len, char c)

  • Przypisuje len wystąpienia znaku c
  • Zgłasza wyjątek long_error, jeśli wynik przekracza maksymalną liczbę znaków
  • Zwraca *to, aby można było je „połączyć”.

Przykładowy kod:

std::string sDest;

sDest.assign(4, 'g');
std::cout << sDest << '\n';

Wyjście:

gggg

Zamiana

Jeśli masz dwa ciągi i chcesz zamienić ich wartości, możesz użyć dwóch funkcji o nazwie swap().

void string::swap (string& str)
void swap (string& str1, string& str2)

  • Obie funkcje zamieniają wartość dwóch ciągów znaków. Funkcja składowa zamienia *this i str, funkcja globalna zamienia str1 i str2.
  • Te funkcje są wydajne i należy ich używać zamiast przypisań, aby wykonać zamianę ciągów.

Przykładowy kod:

std::string sStr1("red");
std::string sStr2("blue");

std::cout << sStr1 << ' ' << sStr2 << '\n';
swap(sStr1, sStr2);
std::cout << sStr1 << ' ' << sStr2 << '\n';
sStr1.swap(sStr2);
std::cout << sStr1 << ' ' << sStr2 << '\n';

Wyjście:

red blue
blue red
red blue
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:  
31 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze