C ++ String Usuń ostatni znak

C ++ String Usuń ostatni znak
Klasa ciągów C ++ ma wiele funkcji członka. Dwa z nich to funkcje pop_back () i erase (). Funkcja pop_back () usuwa ostatni element z ciągu. Funkcja Erase () może usunąć element w dowolnym miejscu w ciągu. Istnieją trzy warianty funkcji usuwania. Różnią się w rodzaju argumentów, które przyjmują. Takie funkcje tej samej nazwy są wywoływane funkcje przeciążone.

C ++ Strings można zadeklarować na dwa główne sposoby: jako stały wskaźnik do zwariów (tablicachotów) lub utworzyć instancję z klasy ciągów biblioteki ciągów. Tutaj funkcje pop_back () i erase () są obiektu String, utworzone z klasy ciągów. Ostatniego elementu tablicy książek nie można usunąć, ponieważ tablica książek nie jest obiektem utworzonym.

Prawdą jest, że literał ciągów składa się z wartości, które są znakami. Każda postać znajduje się w elemencie. Tak więc literał smyczkowy składa się z elementów. Ostatnia postać jest usuwana za pomocą ostatniego elementu.

W tym artykule wyjaśniono, jak usunąć ostatni element łańcucha wraz z jego postacią.

Treść artykułu

  • void pop_back ()
  • Iterator Erase (Const_iterator P)
  • Iterator Erase (Const_iterator pierwszy, Const_iterator Last)
  • Basic_String & Erase (size_type pos = 0, size_type n = npos)
  • Wniosek

void pop_back ()

Ta funkcja członka klasy ciągów usuwa ostatni element ciągu. Funkcja zwraca pustkę. Oznacza to, że nic z niego nie zwraca i żadna zmienna nie może otrzymać niczego zwróconego. Zastosowanie tej funkcji jest zilustrowane w następującym programie:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

string str = "lmnopqr";
Cout <str.pop_back ();
dla (int i = 0; iCout <Cout <powrót 0;

Wyjście to:

LMNOPQR
LMNOPQ

Ostatnia postać została usunięta. Pierwsze dwa wiersze programu obejmują niezbędne biblioteki. Jednym z nich jest oczywiście biblioteka ciągów. Biblioteka ciągów musi zostać uwzględniona, ponieważ wszystkie zaangażowane ciągi są utworzone z klasy ciągów. Następny wiersz to stwierdzenie. Deklaruje, że wszystkie nazwy poniżej są standardową przestrzenią nazw.

Korpus funkcyjny main () zaczyna się od deklaracji (instancji) obiektu ciągów. Następne stwierdzenie wyświetla literał tego nowo zadeklarowanego ciągu na wyjściu. Instrukcja po usunięciu ostatniego znaku, za pomocą funkcji członka pop_back (). Następny segment kodu używa pętli z indeksami do wyświetlania wszystkich znaków, które nie mają już ostatniej, w jednej ciągłej sekwencji.

Iterator Erase (Const_iterator P)

Jeśli iterator wskazuje na ostatni element (znak), funkcja wymazania może usunąć ostatni element. Ta funkcja zwraca iterator, który wskazuje na element tuż po usunięciu (lub tuż po ostatnim elemencie, jeśli ten usunięty był ostatnim elementem). Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

string str = "lmnopqr";
Cout <String :: iterator p = str.koniec();
P--;
String :: iterator it = str.usunąć (p);
dla (int i = 0; iCout <Cout <powrót 0;

Wyjście to:

LMNOPQR
LMNOPQ

Pierwsze trzy wiersze programu są wyjaśnione w taki sam sposób jak w poprzednim programie. W ciele funkcyjnym Main () pierwsza instrukcja deklaruje obiekt ciągów. Następne stwierdzenie wyświetla literał tego nowo zadeklarowanego ciągu na wyjściu. To drukowanie mogło być nadal wykonane za pomocą pętli. Oświadczenie po uzyskaniu iteratora, który wskazuje tuż po ostatnim elemencie postaci. Odbywa się to z funkcją członka, end (). Zwróć uwagę na sposób zadeklarowanego iteratora (lewa strona, =). Następnie iterator jest zmniejszany, aby wskazać ostatni element.

Następnie ostatni element jest usuwany za pomocą funkcji członka Erase (). Następny segment kodu używa pętli z indeksami do wyświetlania wszystkich znaków, które nie mają już ostatniego na terminalu w jednej ciągłej sekwencji.

Iterator Erase (Const_iterator pierwszy, Const_iterator Last)

Ta funkcja członka wymazałaby zakres elementów znaków z ciągu. Tutaj pierwszy jest iterator, który wskazuje pierwszy element zakresu. Iterator zwrócił punkty do elementu, który tam był, tuż po zasięgu. Gdyby nie było tam żadnych elementów, wskazywałoby to na koniec łańcucha. Ostatni to iterator, który wskazuje ostatni element zakresu. Ten ostatni element nie jest zaangażowany w wymazanie.

Aby usunąć ostatni element, sztuczka polega na zrobieniu „ostatniego”, skierowanie tuż poza ostatnim elementem łańcucha; i zrób punkt „pierwszy” w ostatnim elemencie sznurka. Mimo to funkcja usuwania zdejmie ostatni element. Poniższy program pokazuje, jak to się robi:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

string str = "lmnopqr";
Cout <String :: iterator p = str.zaczynać();
p = p + 6;
String :: iterator q = str.koniec();
String :: iterator it = str.usunąć (p, q);
for (it = --t; it> = str.zaczynać(); To--)
Cout << *it;
Cout <powrót 0;

Wyjście to:

LMNOPQR
QPONML

Po usunięciu znaku, R (wraz z jego elementem) pozostały sznurek został wydrukowany znak po znaku, ale w odwrotnej kolejności.

Pierwsze trzy wiersze programu są wyjaśnione w taki sam sposób jak w poprzednim programie. W ciele funkcyjnym Main () pierwsza instrukcja deklaruje obiekt ciągów. Następna instrukcja drukuje nowo zadeklarowany ciąg.

Następujący segment kodu ma trzy stwierdzenia. Pierwszy deklaruje iterator, który wskazuje pierwszą postać łańcucha. Jeszcze sześć znaków ciągu musi zostać policzone przed ostatnią postacią, „R”. Tak więc drugie stwierdzenie tego segmentu dodaje 6 do iteratora. Kolejne stwierdzenie w tym segmencie deklaruje iterator, Q, to wskazuje tuż po zakończeniu ciągu. Sytuacja jest teraz ustalona do usuwania ostatniego elementu: Q punktów tuż po „R” i P punkty do „R”.

Stwierdzenie, które usuwa „R”, to:

String :: iterator it = str.usunąć (p, q);

Po wymazaniu „R” ostatnią postacią jest „Q”. Zwracany iterator, „tutaj”, wskazuje tuż po „Q”.

Kolejnym segmentem kodu to pętla. Oświadczenie o inicjalizacji tej pętli po prostu zmniejsza „to”, wskazując na nową ostatnią postać „Q”. „Q” jest drukowane na terminalu. For pętka nadal zmniejsza „IT”, drukując odpowiedni znak, podczas gdy „to” jest większe niż Str.zaczynać(). Kiedy „to” jest równe Str.początek (), to znaczy „to” wskazuje na „l”, for pętla drukowane „l” i zatrzymuje się. W ten sposób ciąg bez „R” jest drukowany w odwrotnej kolejności.

Aby uzyskać wartość wskazaną na iterator, poprzedzaj iterator z operatorem pośredniczącym * .

Basic_String & Erase (size_type pos = 0, size_type n = npos)

Ta funkcja członka usuwa zakres, podobnie jak powyższa funkcja. Jednak używa indeksów, a nie iteratorów. Jeśli argument POS wynosi 0, wówczas zakres rozpoczyna się od pierwszego elementu. Jeśli argument n jest długością ciągu (liczba znaków), wówczas zakres kończy się na ostatnim znaku. Oba argumenty mają swoje wartości domyślne. Ta funkcja zwraca obiekt klasy ciągów, z znakami usunięcia zakresu.

Sztuką tutaj jest uczynienie wartości POS indeksu ostatniej postaci. Indeks ostatniego znaku (elementu) to rozmiar (długość) listy minus 1. Drugi argument tutaj powinien zostać pominięty dla tego problemu. Ostatni indeks jest podany przez,

str.rozmiar () - 1

Poniższy program używa tej funkcji członka, aby zdjąć ostatni postać „R” z ciągu:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

string str = "lmnopqr";
Cout <int l = str.rozmiar () - 1;
String ret = Str.usunąć (l);
dla (int i = 0; i Cout <Cout <dla (int i = 0; i Cout <Cout <powrót 0;

Wyjście to:

LMNOPQR
LMNOPQ
LMNOPQ

Zarówno oryginalny, jak i zwrócony ciąg stracił „r”. Pierwsze trzy wiersze programu są wyjaśnione w taki sam sposób jak w poprzednim programie. W ciele funkcyjnym Main () pierwsza instrukcja deklaruje obiekt ciągów. Następna instrukcja drukuje nowo zadeklarowany ciąg.

Następna instrukcja określa indeks ostatniego elementu oryginalnego ciągu. Oświadczenie po wymazaniu ostatniego znaku za pomocą tego indeksu. Następny segment kodu drukuje znaki ciągu powrotu, jeden po drugim, używając indeksów. Ostatni segment kodu drukuje znaki oryginalnego ciągu, jeden po drugim, używając indeksów.

Wniosek

Normalna funkcja elementu klasy ciągnej, aby usunąć ostatni znak ciągu, z jego elementem, jest funkcją pop_back (). Istnieją trzy przeciążone funkcje członka Erase (), które można również użyć do tego. Jeden z nich bierze iterator, który wskazuje ostatnią postać i usuwa ostatnią postać. Kolejny ma zasięg, wskazany przez dwa iteratorów: jeden iterator wskazuje na ostatnią postać, a drugie punkty tuż po ostatniej postaci. Dzięki temu ostatnia postać jest zdejmowana. Trzecia przeciążona funkcja używa indeksu ostatniego znaku, aby. Cała dyskusja w tym artykule była zgodna z C ++ 20.