Klasa i przedmioty
Klasa to zestaw zmiennych i funkcji, które współpracują ze sobą; gdzie zmienne nie mają przypisanych wartości. Kiedy wartości są przypisane do zmiennych, klasa staje się obiektem. Różne wartości przypisane do tej samej klasy skutkują różnymi obiektami; oznacza to, że różne obiekty są tą samą klasą o różnych wartościach. Mówi się, że tworzenie obiektu z klasy jest tworzeniem instancji obiektu.
Nazwa, ciąg, to klasa. Obiekt utworzony z klasy string ma wybraną przez programistę nazwę.
Funkcja należąca do klasy jest potrzebna do utworzenia instancji obiektu z klasy. W C++ ta funkcja ma taką samą nazwę jak nazwa klasy. Obiekty utworzone (instancja) z klasy mają różne nazwy nadawane im przez programistę.
Tworzenie obiektu z klasy oznacza konstruowanie obiektu; oznacza to również tworzenie instancji.
Program w C++, który używa klasy string, zaczyna się od następujących wierszy na początku pliku:
#włączać#włączać
przy użyciu standardowej przestrzeni nazw;
Pierwsza linia dotyczy wejścia/wyjścia. Druga linia to umożliwienie programowi wykorzystania wszystkich cech klasy string. Trzecia linia pozwala programowi na używanie nazw w standardowej przestrzeni nazw.
Przeciążanie funkcji
Gdy dwie lub więcej różnych sygnatur funkcji ma tę samą nazwę, mówi się, że nazwa ta jest przeciążona. Gdy wywoływana jest jedna funkcja, liczba i typ argumentów określają, która funkcja jest wykonywana.
Budowa
strunowy()
Poniższa instrukcja tworzy ciąg o zerowej długości bez znaku.
Zaczyna się od nazwy klasy (typu obiektu), string. Po nim następuje nazwa ciągu obiektu podana przez programistę. Operator przypisania następuje; następnie nazwa konstruktora z pustymi nawiasami. W tym przypadku strCol jest skonkretyzowanym obiektem ze wszystkimi składowymi danych (właściwościami) i funkcjami składowymi (metodami).
ciąg(str)
Jest to podobne do powyższego, ale jako argument w konstruktorze pobiera albo literał ciągu znaków, albo identyfikator. Ilustruje to poniższe stwierdzenie:
Konstrukcja z listą inicjatorów
Poniższy kod ilustruje to:
ciąg strCol=strunowy({'I','','ten','lub',„v”,'I','','oraz','lub',„ty”,' 0'});Dosłowny ciąg znaków to kocham cię. Zwróć uwagę na znak nul na końcu listy inicjatora.
ciąg(str, n)
Tworzy to kolekcję ciągów z pierwszych n znaków innego ciągu. Poniższy kod ilustruje to:
zwęglaćP[] = 'Kocham cię';ciąg strCol=strunowy(P, 6);
koszt<<strCol<< ' ';
Rezultatem jest I love z pierwszymi 6 znakami z I love you. Pamiętaj: pojedyncza spacja to znak.
string(str, poz, n)
Tworzy to kolekcję ciągów składającą się z n znaków, zaczynając od pozycji indeksowanej od zera, pos, innego ciągu. Poniższy kod ilustruje to:
zwęglaćP[] = 'Kocham cię';ciąg strCol=strunowy(P, 2, 4);
koszt<<strCol<< ' ';
Rezultatem jest miłość.
W powyższych dwóch przypadkach, jeśli n jest większe niż rozmiar ciągu, zgłaszany jest wyjątek out_of_range – patrz dalej.
ciąg(n, ‘c’)
Tworzy kolekcję n znaków, w której wszystkie znaki są takie same. Rozważać,
ciąg strCol=strunowy(5,'I');koszt<<strCol<< ' ';
Wyjście to eeee, 5 e.
Przypisywanie ciągu
Ciąg można przypisać w następujący sposób, po zadeklarowaniu obu ciągów:
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2;
strKol2=strKol1;
koszt<<strKol2<< ' ';
Wynik jest taki, kocham cię.
Konstruowanie z iteratorem
Iterator zapewnia ogólną reprezentację skanowania poprzez wartości kolekcji. Składnia tworzenia łańcucha za pomocą iteratora to:
szablon<klasa InputIterator>basic_string(Początek InputIterator,Koniec iteratora wejściowego, stałyAlokator&
do=Alokator());
To konstruuje łańcuch dla zakresu [begin, end) – zobacz szczegóły później.
Zniszczenie struny
Aby zniszczyć strunę, po prostu pozwól jej wyjść poza zakres.
Dostęp do elementu klasy ciągu
Utworzony obiekt ciągu może być indeksowany (indeksowany) jak tablica. Liczenie indeksów zaczyna się od zera.
ciągNazwa[i]
Operacja stringName[i] zwraca odwołanie do znaku (elementu) w iNSindeks kolekcji znaków. Poniższy kod wyprowadza v:
ciąg strCol=strunowy('Kocham cię');zwęglaćch=strCol[4];
koszt<<ch<< ' ';
stringName[i] const
Operacja stringName[i] const jest wykonywana zamiast stringName[i], gdy obiekt ciągu jest obiektem stałym. Jest używany w następującym kodzie na przykład:
stałyciąg strCol=strunowy('Kocham cię');zwęglaćch=strCol[4];
koszt<<ch<< ' ';
Wyrażenie zwraca stałe odniesienie do iNSelement obiektu tekstowego. Żaden z elementów ciągu nie może zostać zmieniony.
Przypisywanie postaci z indeksem dolnym
Znak można przypisać do niestałego obiektu tekstowego w następujący sposób:
ciąg strCol=strunowy(„Dzwonię”);strCol[2] = 'F';
koszt<<strCol<< ' ';
Wyjście to spadam. „c” zmieniono na „f”.
ciągNazwa.at(i)
stringName.at(i) jest podobny do stringName[i], ale stringName.at(i) jest bardziej niezawodny. Poniższy kod pokazuje, jak należy go używać:
ciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.w(4);
koszt<<ch<< ' ';
at() jest w rzeczywistości funkcją składową klasy ciągu.
stringName.at(i) const
stringName.at(i) const jest podobny do stringName[i] const, ale stringName.at(i) const jest bardziej niezawodny. stringName.at(i) const jest wykonywane zamiast stringName.at(i), gdy obiekt string jest stałym obiektem string. Jest używany w następującym kodzie, na przykład:
stałyciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.w(4);
koszt<<ch<< ' ';
at() const jest w rzeczywistości funkcją składową klasy string.
Przypisywanie wartości za pomocą funkcji at()
Wartość można przypisać do niestałego obiektu ciągu za pomocą funkcji at() w następujący sposób:
ciąg strCol=strunowy(„Dzwonię”);strKol.w(2) = 'F';
koszt<<strCol<< ' ';
Wyjście to spadam.
Problem z subskrypcjami
Problem z subskryptami (indeksowaniem) polega na tym, że jeśli indeks jest poza zakresem, może zostać uzyskany błędny wynik lub może zostać wygenerowany błąd w czasie wykonywania.
z przodu()
Zwraca odwołanie do pierwszego elementu obiektu ciągu bez usuwania elementu. Wyjście następującego kodu to „I”.
ciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.z przodu();
koszt<<ch<< ' ';
Znak nie jest usuwany z obiektu tekstowego.
front() const
Gdy konstrukcja obiektu string jest poprzedzona przez const, zamiast front() wykonywane jest wyrażenie front() const. Jest używany na przykład w poniższym kodzie.
stałyciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.z przodu();
koszt<<ch<< ' ';
Zwracane jest stałe odwołanie. Element nie jest usuwany z obiektu string. Nie można zmienić znaku dla stałego obiektu ciągu.
plecy()
Zwraca odwołanie do ostatniego elementu obiektu ciągu bez usuwania elementu. Wyjście następującego kodu to „u”.
ciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.plecy();
koszt<<ch<< ' ';
back() const
Gdy konstrukcja obiektu string jest poprzedzona przez const, zamiast back() wykonywane jest wyrażenie back() const. Jest używany na przykład w poniższym kodzie.
stałyciąg strCol=strunowy('Kocham cię');zwęglaćch=strKol.plecy();
koszt<<ch<< ' ';
Zwracane jest stałe odwołanie. Element nie jest usuwany z obiektu string.
Pojemność sznurka
size_type pojemność() const noexcept
Łączna liczba znaków, które ciąg może przechowywać bez konieczności realokacji, jest zwracana przez tę funkcję członkowską pojemności. Segment kodu do tego to:
ciąg strCol=strunowy();intna jednego=strKol.Pojemność();
koszt<<na jednego<< ' ';
Wyjście na moim komputerze to 15.
rezerwa(n)
Miejsce w pamięci nie zawsze jest dostępne w wolnym sklepie. Dodatkowe miejsce można zarezerwować z wyprzedzeniem. Rozważ następujący segment kodu:
ciąg strCol=strunowy('kocham');strKol.rezerwować(6);
koszt<<strKol.Pojemność() << ' ';
Wyjście na moim komputerze to 15.
size() const noexcept
Zwraca liczbę znaków w ciągu. Poniższy kod ilustruje:
ciąg strCol=strunowy('Kocham cię');intna jednego=strKol.rozmiar();
koszt<<na jednego<< ' ';
Dane wyjściowe to 10, które nie zawierają znaku nul, .
length() const noexcept
-taki sam jak rozmiar().Notatka:rozmiar() <=Pojemność().
zmniejsz_do_dopasowania()
Może zredukować pojemność() do size() przez spowodowanie realokacji; nie jest to obowiązkowe. Poniższy kod demonstruje to:
ciąg strCol=strunowy('Kocham cię');strKol.rezerwować(12);
strKol.zmniejsz_do_dopasowania();
ints=strKol.rozmiar();
koszt<<s<< ' ';
Wyjście to 10, a nie 12 lub 16. Funkcja zwraca void.
zmień rozmiar (sz), zmień rozmiar (sz, „c”)
Powoduje to zmianę rozmiaru ciągu. Jeśli nowy rozmiar jest mniejszy niż stary, elementy znajdujące się na końcu są usuwane. Jeśli nowy rozmiar jest dłuższy, na końcu dodawany jest domyślny znak. Aby dodać określony znak, użyj funkcji resize() z dwoma argumentami. Poniższy segment kodu ilustruje użycie tych dwóch funkcji:
ciąg strCol=strunowy('Kocham cię');strKol.Zmień rozmiar(6);
koszt<< 'Nowy rozmiar strCol: ' <<strKol.rozmiar() << ' ';
ciąg strKol1=strunowy('Kocham', 'I');
strKol1.Zmień rozmiar(12);
koszt<< 'Nowy rozmiar strCol1: ' <<strKol1.rozmiar() << ' ';
Dane wyjściowe to:
Nowy rozmiar strCol: 6Nowy rozmiar strCol1: 12
Funkcja zwraca void.
wyczyść() bez wyjątku
Usuwa wszystkie elementy z ciągu, jak ilustruje poniższy segment kodu:
ciąg strCol=strunowy('Kocham cię');strKol.jasne();
koszt<<strKol.rozmiar() << ' ';
Wyjście to 0. Funkcja zwraca void.
empty() const noexcept
Zwraca 1 dla true, jeśli nie ma znaku w obiekcie string, lub 0 dla false, jeśli obiekt string nie jest pusty. Poniższy kod ilustruje to:
ciąg strKol1=strunowy('Kocham cię');koszt<<strKol1.pusty() << ' ';
ciąg strCol2=strunowy();
koszt<<strKol2.pusty() << ' ';
Dane wyjściowe to:
01
Powracające iteratory i klasa String
Iterator jest jak wskaźnik, ale ma większą funkcjonalność niż wskaźnik.
begin() bez wyjątku
Zwraca iterator wskazujący na pierwszy znak (element) obiektu napisowego, jak w następującym segmencie kodu:
ciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::iteratoriter=strKol.rozpocząć();
koszt<< *iter<< ' ';
Wyjście to „I”. Zwróć uwagę na sposób, w jaki została zadeklarowana deklaracja, która odbiera iterator. Iterator jest wyłuskiwany w wyrażeniu zwracanym w celu uzyskania wartości w ten sam sposób, w jaki wyłuskiwany jest wskaźnik.
begin() const noexcept;
Zwraca iterator wskazujący na pierwszy element kolekcji obiektów ciągu. Kiedy konstrukcja obiektu jest poprzedzona const, zamiast begin() wykonywane jest wyrażenie begin() const. Pod tym warunkiem nie można modyfikować odpowiedniego elementu w obiekcie. Jest używany na przykład w poniższym kodzie.
stałyciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::const_iteratoriter=strKol.rozpocząć();
koszt<< *iter<< ' ';
Wyjście to „I”. Zauważ, że tym razem const_iterator został użyty zamiast samego iteratora, aby otrzymać zwrócony iterator.
end() bez wyjątku
Zwraca iterator, który wskazuje bezpośrednio za ostatni element obiektu ciągu. Rozważ następujący segment kodu:
ciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::iteratoriter=strKol.kończyć się();
koszt<< *iter<< ' ';
Wyjście ma wartość null, co jest niczym, ponieważ nie ma żadnego konkretnego elementu poza ostatnim elementem.
end() const noexcept
Zwraca iterator, który wskazuje bezpośrednio za ostatni element obiektu ciągu. Gdy konstrukcja obiektu string jest poprzedzona przez const, zamiast end() wykonywane jest wyrażenie end() const. Rozważ następujący segment kodu:
stałyciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::const_iteratoriter=strKol.kończyć się();
koszt<< *iter<< ' ';
Dane wyjściowe mają wartość NULL. Zauważ, że tym razem const_iterator został użyty zamiast samego iteratora, aby otrzymać zwrócony iterator.
Odwrotna iteracja
Możliwe jest posiadanie iteratora, który iteruje od rzeczywistego końca do tuż przed pierwszym elementem:
rbegin() bez wyjątku
Zwraca iterator, który wskazuje na ostatni element skonkretyzowanego obiektu ciągu, jak w następującym segmencie kodu:
ciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::iterator_odwrotnyiter=strKol.zaczynać();
koszt<< *iter<< ' ';
Wyjście to „u”. Zwróć uwagę, w jaki sposób deklaracja, która odbiera iterator odwrotny, została zadeklarowana. Iterator jest wyłuskiwany w wyrażeniu zwracanym w celu uzyskania wartości w ten sam sposób, w jaki wyłuskiwany jest wskaźnik.
rbegin() const noexcept;
Zwraca iterator wskazujący na ostatni element obiektu ciągu. Gdy konstrukcja obiektu jest poprzedzona const, zamiast rbegin() wykonywane jest wyrażenie rbegin() const. Pod tym warunkiem nie można modyfikować odpowiedniego elementu w obiekcie. Ta funkcja jest używana na przykład w poniższym kodzie.
stałyciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::const_reverse_iteratoriter=strKol.zaczynać();
koszt<< *iter<< ' ';
Wyjście to „u”. Zauważ, że tym razem użyto const_reverse_iterator, a nie tylko reverse_iterator, aby otrzymać zwrócony iterator.
render () bez wyjątku
Zwraca iterator, który wskazuje tuż przed pierwszym elementem obiektu ciągu. Rozważ następujący segment kodu:
ciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::iterator_odwrotnyiter=strKol.sprawia, że();
koszt<< *iter<< ' ';
Wyjście ma wartość null, co jest niczym, ponieważ nie ma konkretnego elementu tuż przed pierwszym elementem.
render () const noexcept
Zwraca iterator, który wskazuje tuż przed pierwszym elementem obiektu ciągu. Gdy konstrukcja obiektu jest poprzedzona const, zamiast rend() wykonywane jest wyrażenie rend() const. Rozważ następujący segment kodu:
stałyciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::const_reverse_iteratoriter=strKol.sprawia, że();
koszt<< *iter<< ' ';
Dane wyjściowe mają wartość NULL. Zauważ, że tym razem użyto const_reverse_iterator, a nie tylko reverse_iterator, aby otrzymać zwrócony iterator.
Modyfikatory ciągów
Modyfikator, który modyfikuje obiekt ciągu, może również przyjmować lub zwracać iterator.
Dołączanie
basic_string&operator+ =(stałybasic_string&P)Dołącza prawy obiekt ciągu do lewego obiektu ciągu. Przykład:
ciąg strKol1=strunowy('Kocham');ciąg strCol2=strunowy(' ty');
strKol1+ =strKol2;
koszt<<strKol1<< ' ';
Wynik jest taki, że cię kocham. Nie zapominaj, że strCol1 += strCol2 to to samo co strCol1 = strCol1+strCol2.
basic_string& operator+=(const charT* s)
Dołącza literał ciągu do kolekcji obiektów ciągu. Przykład:
ciąg strCol=strunowy('Kocham');strCol+ = ' ty';
koszt<<strCol<< ' ';
Wyjście: kocham cię.
basic_string& operator+=(wykres c)
Dołącza pojedynczy znak do ciągu obiektu. Przykład:
ciąg strCol=strunowy('Kocham Cię');strCol+ = „ty”;
koszt<<strCol<< ' ';
Wyjście: kocham cię.
basic_string& operator+=(inicjalizator_list)
Dołącza listę inicjatora. Przykład:
ciąg strCol=strunowy('Kocham');strCol+ = {'','oraz','lub',„ty”,' 0'};
koszt<<strCol<< ' ';
Wyjście: kocham cię. Zawsze dobrze jest dodać nul, na końcu listy inicjatorów znaków.
basic_string& append(const basic_string& str)
Dołącza obiekt ciągu argumentu do głównego obiektu ciągu. Przykład:
ciąg strKol1=strunowy('Kocham');ciąg strCol2=strunowy(' ty');
strKol1.dodać(strKol2);
koszt<<strKol1<< ' ';
Wyjście: kocham cię.
basic_string& append(const charT* s)
Dołącza argument literału ciągu do głównego ciągu. Przykład
ciąg strCol=strunowy('Kocham');strCol=strKol.dodać(' ty');
koszt<<strCol<< ' ';
Wyjście: kocham cię.
basic_string& append(initializer_list)
Dołącza listę inicjatora, która jest argumentem, do głównego ciągu. Przykład:
ciąg strCol=strunowy('Kocham');strCol=strKol.dodać({'','oraz','lub',„ty”,' 0'});
koszt<<strCol<< ' ';
Wyjście: kocham cię. Zawsze dobrze jest dodać znak nul, na końcu listy inicjalizatorów.
basic_string& append(size_type n, charT c)
Dołącza n tego samego znaku. Przykład:
ciąg strCol=strunowy('patka');strCol=strKol.dodać(2, 'lub');
koszt<<strCol<< ' ';
Wyjście: tabu.
basic_string& append(const charT* s, size_type n)
Dołącza pierwsze n elementów literału ciągu do głównego obiektu ciągu. Przykład:
ciąg strCol=strunowy('Kocham');strCol=strKol.dodać(' jesteś tak', 4);
koszt<<strCol<< ' ';
Wynikiem jest: Kocham cię. Jeśli n jest większe niż długość literału, zgłaszany jest wyjątek length_error.
basic_string& append(const basic_string& str, size_type pos, size_type n = npos)
Dołącza n znaków z indeksu, pos do głównego ciągu. Przykład:
ciąg strCol=strunowy('Kocham');strCol=strKol.dodać(czy tak?, 2, 4);
koszt<<strCol<< ' ';
Wyjście: kocham cię. Tutaj również zostałby rzucony wyjątek, patrz dalej.
Przypisywanie
basic_string&przydzielać(stałybasic_string&P)Przypisuje obiekt ciągu argumentu do głównego ciągu, zastępując wszelką zawartość, która tam była.
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2=strunowy(„Ona mnie potrzebuje”);
strKol1=strKol1.przydzielać(strKol2);
koszt<<strKol1<< ' ';
Wyjście: Ona mnie potrzebuje.
basic_string&przydzielać(staływykres*s)Przypisuje argument literału ciągu do głównego ciągu, zastępując wszelką zawartość, która tam była.
ciąg strCol=strunowy('Kocham cię');strCol=strKol.przydzielać(„Ona mnie potrzebuje”);
koszt<<strCol<< ' ';
Wyjście: Ona mnie potrzebuje.
basic_string&przydzielać(lista_inicjalizacyjna<wykres>)Przypisuje argument listy inicjującej do głównego ciągu znaków,zastąpienie wszelkich treści, które tam były.
[DW język='C'uciekł='prawda'szerokość='780']
ciąg strCol=strunowy('Kocham cię');
strCol=strKol.przydzielać({'S','h','I','','n','I','I','D','s','','m','I',' 0'});
koszt<<strCol<< ' ';
Wyjście: Ona mnie potrzebuje. Dobrze jest zawsze dodawać nul, na końcu listy znaków, aby utworzyć literał ciągu.
basic_string&przydzielać(staływykres*s,typ_rozmiaru n)Przypisuje pierwsze n znaków argumentu literału ciągu do głównego ciągu, zastępując wszelką zawartość, która tam była.
ciąg strCol=strunowy('Kocham cię');strCol=strKol.przydzielać(„Ona mnie potrzebuje”, 9);
koszt<<strCol<< ' ';
Wyjście: Ona potrzebuje.
basic_string&przydzielać(typ_rozmiaru n,wykres c)Przypisuje do głównego ciągu argument składający się z n takich samych znaków, zastępując wszelką zawartość, która tam była.
ciąg strCol=strunowy('Kocham cię');strCol=strKol.przydzielać(4, 'I');
koszt<<strCol<< ' ';
Wyjście: eeee
basic_string&przydzielać(stałybasic_string&P,size_type poz,typ_rozmiaru n=npos)
Przypisuje n znaków argumentu obiektu napisowego, zaczynając od pos, do głównego napisu, zastępując wszelką jego zawartość.
ciąg strCol=strunowy('Kocham cię');strCol=strKol.przydzielać(„Ona mnie potrzebuje”, 4, 5);
koszt<<strCol<< ' ';
Wynik: potrzeby. Zgłosi wyjątek – zobacz później.
Wstawianie
basic_string&wstawić(size_type poz, stałybasic_string&P)Wstawia argument obiektu ciągu do głównego ciągu, w indeksie, poz.
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2=strunowy(„nienawiść i”);
strKol1=strKol1.wstawić(2,strKol2);
koszt<<strKol1<< ' ';
Wyjście: Nienawidzę cię i kocham. Zgłosi wyjątek – zobacz później.
basic_string&wstawić(size_type poz1, stałybasic_string&P,size_type poz2,typ_rozmiaru n=npos)
Wstawia długość n znaków z pozycji 2 argumentu obiektu łańcuchowego do łańcucha głównego pod indeksem poz1.
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2=strunowy(„nienawiść, chcieć i potrzebować”);
strKol1=strKol1.wstawić(2,strKol2, 6, 9);
koszt<<strKol1<< ' ';
Wyjście: chcę cię i kocham.
iterator wstaw(const_iterator p, charT c)
Wstawia określony znak, który jest argumentem, na pozycję wskazaną przez iterator. Zwraca iterator dla pozycji nowo wstawionego znaku.
ciąg strCol=strunowy('Kocham cię');basic_string<zwęglać> ::iteratoriter=strKol.rozpocząć();
++iter; ++iter; ++iter; ++iter; ++iter; ++iter;
basic_string<zwęglać> ::iteratorsieć=strKol.wstawić(iter, 'D');
koszt<< *sieć<< ' ';
koszt<<strCol<< ' ';
Dane wyjściowe to:
'D'
kochałem cię
wstawka iteratora(const_iterator p, size_type n, charT c)
Wstawia n tego samego znaku argumentu na pozycję wskazaną przez iterator. Zwraca iterator dla pozycji początku nowo wstawionych tych samych znaków.
ciąg strCol=strunowy(„Tab w ziemi”.);basic_string<zwęglać> ::iteratoriter=strKol.rozpocząć();
++iter; ++iter; ++iter;
basic_string<zwęglać> ::iteratorsieć=strKol.wstawić(iter, 2, 'lub');
koszt<< *sieć<< ' ';
koszt<<strCol<< ' ';
Dane wyjściowe to:
'lub'
Tabu na ziemi.
basic_string&wstawić(size_type poz, staływykres*s)Wstawia literał ciągu argumentów w indeksie, pos w głównym ciągu.
ciąg strCol=strunowy(„Tab w ziemi”.);strCol=strKol.wstawić(3, „oo”);
koszt<<strCol<< ' ';
Wyjście: Tabu na ziemi.
basic_string&wstawić(size_type poz, staływykres*s,typ_rozmiaru n)Wstawia pierwsze n znaków literału ciągu argumentów, w indeksie, pos w głównym ciągu.
ciąg strCol=strunowy(„Tab w ziemi”.);strCol=strKol.wstawić(3, „oooo”, 2);
koszt<<strCol<< ' ';
Wyjście: Tabu na ziemi.
Wymiana
basic_string&wymienić(size_type poz1,rozmiar_typ n1, stałybasic_string&P))Zamienia n1 znaków w głównym obiekcie ciągu z indeksu, poz1, na obiekt ciągu argumentu.
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2=strunowy(„nienawidzę cię i”);
strKol1=strKol1.wymienić(2, 4,strKol2);
koszt<<strKol1<< ' ';
Wynik: nienawidzę ciebie i ciebie. Zgłosi wyjątek – zobacz później.
basic_string&wymienić(size_type poz1,rozmiar_typ n1, stałybasic_string&P,size_type poz2,rozmiar_typ n2=npos)
Zamienia n1 znaków w głównym obiekcie ciągu z indeksu poz1 na n2 znaków argumentu obiektu łańcucha z indeksu poz2.
ciąg strKol1=strunowy('Kocham cię');ciąg strCol2=strunowy(„nienawidzimy jego i jej”);
strKol1=strKol1.wymienić(2, 4,strKol2, 3, 12);
koszt<<strKol1<< ' ';
Wyjście: nienawidzę jego i ciebie.
basic_string&wymienić(size_type poz1,rozmiar_typ n1, staływykres*s,rozmiar_typ n2)
Zastępuje n1 znaków w głównym obiekcie ciągu z indeksu, poz1, pierwszymi n2 znakami literałowego argumentu ciągu.
ciąg strKol1=strunowy('Kocham cię');strKol1=strKol1.wymienić(2, 4, „nienawidzę go i jej”, 12);
koszt<<strKol1<< ' ';
Wyjście: nienawidzę jego i ciebie.
basic_string& replace(size_type poz, size_type n, const charT* s)
Zastępuje n znaków w głównym obiekcie ciągu z index, pos, dosłownym argumentem ciągu.
ciąg strKol1=strunowy('Kocham cię');strKol1=strKol1.wymienić(2, 4, „nienawidzę go i”);
koszt<<strKol1<< ' ';
Wyjście: nienawidzę jego i ciebie.
basic_string&wymienić(size_type poz1,rozmiar_typ n1,rozmiar_typ n2,wykres c)Zamienia n1 znaków w głównym obiekcie ciągu z indeksu, poz1, na n2 tego samego znaku argumentu.
ciąg strKol1=strunowy(- Zła tabletka tam.);strKol1=strKol1.wymienić(9, 3, 2, 'lub');
koszt<<strKol1<< ' ';
Wyjście: Złe tabu.
iterator kasowanie(const_iterator p)
Usuwa znak w pozycji wskazanej przez iterator; następnie zwraca pozycję iteratora, która jest teraz zajęta przez znak znajdujący się obok tego znaku (lub end()). Poniższy kod ilustruje to:
ciąg strCol=strunowy(„abcd”);basic_string<zwęglać> ::iteratoriter=strKol.rozpocząć();
++iter; ++iter;
strKol.usuwać(iter);
koszt<<strCol[0] << '' <<strCol[1] << '
' <<strCol[2]<< ' ';
Wyjście: a b d
basic_string&usuwać(size_type poz= 0,typ_rozmiaru n=npos)Usuwa n znaków z indeksu, poz.
ciąg strCol=strunowy(„abcd”);strKol.usuwać(1, 2);
koszt<<strCol[0] << '' <<strCol[1] << ' ';
Wyjście: a d
void push_back(wykres c)
Aby dodać pojedynczy znak na końcu ciągu:
ciąg strCol=strunowy(„abcd”);strKol.push_back(„5”);
koszt<<strCol<< ' ';
Wyjście: abcd5
nieważne pop_back()
Usuwa ostatni znak bez zwracania go. Rozmiar sznurka zmniejsza się o 1.
ciąg strCol=strunowy(„abcd”);strKol.pop_back();
koszt<<strCol<< ' ';
Wyjście: abcd
zamiana pustki(basic_string&s)
Literały dwóch obiektów łańcuchowych można zamienić.
ciąg strKol1=strunowy(<pomoc='post-69618-__DdeLink__781_3724385525'>do>„abcd”);ciąg strCol2=strunowy('1234567');
strKol1.zamieniać(strKol2);
koszt<<strKol1<< ' ';
koszt<<strKol2<< ' ';
Dane wyjściowe to:
'1234567'„abcd”
Operacje na ciągach
const charT* c_str() const noexcept
Zwraca wskaźnik do pierwszego elementu ciągu. Wskaźnik można zwiększać.
stałyciąg strCol=strunowy(„abcd”);stały zwęglać*P=strKol.c_str();
koszt<< *P<< ' ';
++P;
koszt<< *P<< ' ';
Dane wyjściowe to:
dob
Ze względu na drugą stałą w nagłówku program nie może zmienić żadnego znaku w łańcuchu. Budowę poprzedza konst.
const charT* data() const noexcept
Zwraca wskaźnik do pierwszego elementu ciągu. Wskaźnik można zwiększać.
stałyciąg strCol=strunowy(„abcd”);stały zwęglać*P=strKol.dane();
koszt<< *P<< ' ';
++P;
koszt<< *P<< ' ';
Dane wyjściowe to:
dob
Ze względu na drugą stałą w nagłówku program nie może zmienić żadnego znaku w łańcuchu. Budowę poprzedza konst.
basic_string substr(size_type pos = 0, size_type n = npos) const
Zwraca obiekt typu string składający się z n znaków dla podłańcucha rozpoczynającego się od indeksu, poz.
stałyciąg strCol=strunowy(„abcdefghij”);stałyciąg retStr=strKol.substr(2, 4);
koszt<<retStr<< ' ';
Wyjście: cdef
find() Funkcje składowe
size_type find(const basic_string& str, size_type pos = 0) const noexcept
Szuka obiektu podciągu zaczynającego się od indeksu, poz. Jeśli zostanie znaleziony, zwraca początek podciągu w ciągu głównym.
ciąg strCol=strunowy('Jesteśmy światem!');ciąg strKol1=strunowy('ten');
intna jednego=strKol.odnaleźć(strKol1, 2);
koszt<<na jednego<< ' ';
Wyjście:
indeks: 7Zwraca -1, jeśli nie zostanie znaleziony.
size_type find(const charT* s, size_type pos = 0) const
Szuka literału podłańcuchowego zaczynającego się od indeksu, poz. Jeśli zostanie znaleziony, zwraca początek podciągu w ciągu głównym.
ciąg strCol=strunowy('Jesteśmy światem!');intna jednego=strKol.odnaleźć('są', 0);
koszt<<na jednego<< ' ';
Ponieważ pos = 0 jest wartością domyślną, 0 w argumencie mogło zostać pominięte.
Wyjście: 3
Zwraca -1, jeśli nie zostanie znaleziony.
size_type find (const charT* s, size_type pos, size_type n) const
Szuka pierwszych n znaków literału podłańcuchowego, zaczynając od indeksu, poz. Jeśli zostanie znaleziony, zwraca początek podciągu w ciągu głównym.
ciąg strCol=strunowy(„Największy chłopiec”);intna jednego=strKol.odnaleźć(„większy”, 1, 3);
koszt<<na jednego<< ' ';
Wyjście: 4
Zwraca -1, jeśli nie zostanie znaleziony.
size_type find(chart c, size_type poz = 0) const
Szuka znaku, c zaczynając od indeksu, poz. Jeśli zostanie znaleziony, zwraca początek podciągu w ciągu głównym. Jeśli nie zostanie znaleziony, zwraca -1.
ciąg strCol=strunowy('Jesteśmy światem!');intna jednego=strKol.odnaleźć('z');
koszt<<na jednego<< ' ';
Wyjście: -1
Istnieją następujące odwrotne funkcje członkowskie find():
size_type rfind(stałybasic_string&P,size_type poz=npos) stałybez wyjątku;size_type rfind(staływykres*s,size_type poz=npos) stały;
size_type rfind(staływykres*s,size_type poz,typ_rozmiaru n) stały;
size_type rfind(wykres c,size_type poz=npos) stały;
Porównanie funkcji składowych
int porównaj(const basic_string& str) const noexcept
Porównuje obiekt ciągu argumentu z głównym obiektem ciągu. Jeśli główny ciąg występuje przed argumentem (w słowniku), zwraca liczbę dodatnią. Jeśli występuje po głównym łańcuchu, zwraca liczbę ujemną. Jeśli dwa ciągi są takie same, zwraca zero.
ciąg strKol1=strunowy('tłum');ciąg strCol2=strunowy('ludzie');
intna jednego=strKol1.porównywać(strKol2);
koszt<<na jednego<< ' ';
Wyjście: -13
int porównaj(const charT* s) const
Tak samo jak powyżej, ale argumentem jest literał łańcuchowy.
ciąg strKol1=strunowy('ludzie');intna jednego=strKol1.porównywać('ludzie');
koszt<<na jednego<< ' ';
Wyjście: 0
Operatory ciągów
Te operatory mają zastosowanie do obiektów ciągów, a niekoniecznie literałów ciągów.
+
Łączy dwa obiekty łańcuchowe i zwraca konkatenację.
ciąg strKol1=strunowy(„tańczyć”);ciąg strCol2=strunowy(' Księżyc');
ciąg strCol=strKol1+strKol2;
koszt<<strCol<< ' ';
Wyjście: taniec na księżycu.
==
Zwraca 1 dla true, jeśli obiekty łańcuchowe są takie same; a zero dla fałszu, jeśli tak nie jest.
ciąg strKol1=strunowy(„tańczyć”);ciąg strCol2=strunowy(' na Księżycu');
boli bl=strKol1==strKol2;
koszt<<bl<< ' ';
Wyjście: 0
! =
Zwraca 1, jeśli obiekty łańcuchowe nie są takie same, i zero, jeśli są.
ciąg strKol1=strunowy(„tańczyć”);ciąg strCol2=strunowy(' na Księżycu');
boli bl=strKol1! =strKol2;
koszt<<bl<< ' ';
Wyjście: 1
<
Zwraca 1, jeśli lewy operand jest mniejszy niż prawy operand zgodnie ze słownikiem, lub zero, jeśli tak nie jest.
ciąg strKol1=strunowy(„tańczyć”);ciąg strCol2=strunowy(' na Księżycu');
boli bl=strKol1<strKol2;
koszt<<bl<< ' ';
Wyjście: 0
W przypadku zwykłych znaków w C++, w kolejności rosnącej, liczby są poprzedzane wielkimi literami, które pojawiają się przed małymi literami. Znak spacji występuje przed zerem i wszystkimi.
Typy znaków głównego ciągu C++
zwęglać
Typ char jest oryginalnym typem C++ i zwykle przechowuje znak w 8 bitach.
char16_t
To przechowuje znak w 16 bitach.
char32_t
To przechowuje znak w 32 bitach.
wchar_t
char16_t i char32_t są szerokimi znakami. wchar_t to szeroki znak, który jest zastrzeżony i zdefiniowany w implementacji.
Te typy nazywane są cechami. Jednak C++ nazywa je technicznie specjalizacjami cech. W tym artykule skupiliśmy się na typie char. Do pozostałych typów podejście jest nieco inne – patrz dalej.
Inne funkcje składowe operacji na ciągach
Sygnatury innych funkcji operacji na ciągach znaków to:
size_type find_first_of(stałybasic_string&P,size_type poz= 0) stałybez wyjątku;size_type find_first_of(staływykres*s,size_type poz,typ_rozmiaru n) stały;
size_type find_first_of(staływykres*s,size_type poz= 0) stały;
size_type find_first_of(wykres c,size_type poz= 0) stały;
size_type find_last_of(stałybasic_string&P,size_type poz=npos) stałybez wyjątku;
size_type find_last_of(staływykres*s,size_type poz,typ_rozmiaru n) stały;
size_type find_last_of(staływykres*s,size_type poz=npos) stały;
size_type find_last_of(wykres c,size_type poz=npos) stały;
size_type find_first_not_of(stałybasic_string&P,size_type poz= 0) stałybez wyjątku;
size_type find_first_not_of(staływykres*s,size_type poz,typ_rozmiaru n) stały;
size_type find_first_not_of(staływykres*s,size_type poz= 0) stały;
size_type find_first_not_of(wykres c,size_type poz= 0) stały;
size_type find_last_not_of(stałybasic_string&P,size_type poz=npos) stałybez wyjątku;
size_type find_last_not_of(staływykres*s,size_type poz,typ_rozmiaru n) stały;
size_type find_last_not_of(staływykres*s,size_type poz=npos) stały;
size_type find_last_not_of(wykres c,size_type poz=npos) stały;
Wniosek
C++ ma literały ciągów i obiekty ciągów. Obiekt string ma kolekcję znaków w sekwencji, podobną do tablicy znaków w sekwencji. Różnica między kolekcją ciągów a tablicą polega na tym, że kolekcja ciągów może rosnąć lub zmniejszać się. Obiekt ciągu jest tworzony (konstruowany) z klasy ciągu. Obiekt tekstowy to struktura danych z funkcjami składowymi. Funkcje składowe można sklasyfikować w nagłówkach konstrukcji obiektów, dostępu do elementów, pojemności ciągu, funkcji składowych ciągu z argumentami iteratora i typami zwracanymi oraz modyfikatorami ciągu. Równość ciągów i operatory relacyjne również istnieją.