Jak korzystać z klasy C++ String

How Use C String Class



Literał ciągu to sekwencja znaków w stałym wskaźniku tablicy, zakończona znakiem nul, . Po zidentyfikowaniu przez zmienną literał ciągu nie może w rzeczywistości skrócić ani zwiększyć długości. Na literale ciągu nie można wykonać wielu operacji. Tak więc istnieje potrzeba klasy string. Klasa ciągu C++ jest przeznaczona dla struktury danych, kolekcji znaków w sekwencji, która umożliwia funkcjom składowym i operatorom działanie na znakach. Klasa ciągu umożliwia więcej manipulacji na odpowiednim literale ciągu, niż tylko na literale ciągu. Aby zrozumieć ten artykuł, musisz mieć dobrą znajomość literału ciągów znaków.

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.

ciąg strCol=strunowy();

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:

ciąg strCol=strunowy('Kocham cię');

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: 6
Nowy 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:

0
1

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:

do
b

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:

do
b

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: 7
Zwraca -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ą.