Podekstring C ++ od indeksu do indeksu

Podekstring C ++ od indeksu do indeksu
Substring, podłoże lub zasięg to tylko część sekwencji znaków w literale sznurku. Wiedza, czym jest podłoże w C ++, nie jest wystarczająca dla programisty. Programista musi zrozumieć, jak zidentyfikować podłoże według kodu. Programista musi wiedzieć, jak zwrócić podłoże. Programista musi wiedzieć, jak usunąć podłoże. Programista musi wiedzieć, jak wymienić podłoże po usunięciu.

Ciąg można utworzyć na dwa główne sposoby: przez Const Char* (tablica szyjów) lub instancja z klasy ciągów. W przypadku instancji z klasy ciągów biblioteka ciągów musi być zawarta w programie C ++. Identyfikacja, powrót, usuwanie i wymiana podłańca w C ++, jest zwykle wykonywana tylko z obiektem stringowym utworzonym z klasy ciągów.

Obiekt ciągu jest strukturą danych z metodami (funkcje członka). Jego lista składa się z elementów, w których każdy element ma charakter. Wartości listy to znaki. Podobnie jak tablica, każdy znak obiektu String można uzyskać przez indeks. Zatem substring można zidentyfikować według indeksów: niższy wskaźnik i wyższy wskaźnik. Zakres rozpoczyna się od niższego indeksu do wyższego indeksu, z wyłączeniem wyższego indeksu. Znak wyższego wskaźnika nie jest uwzględniony w zakresie, a długość substringów pochodzi od charakteru niższego wskaźnika do znaku tuż przed charakterem wyższego indeksu.

Dwa iteratory mogą również zidentyfikować podłoże lub zasięg: pierwszy iterator jest na początku zakresu, a ostatni iterator jest dla postaci, który jest tuż po faktycznym ostatnim znaku (lub na końcu wiringu). Istnieje prosty związek między iteratorem a indeksem - patrz poniżej.

W tym artykule wyjaśniono, czym jest podłoże i jak identyfikować, zwracać, usuwać i wymieniać podłoże w C++.

Treść artykułu

  • Identyfikacja i zwracanie substring
  • Powiązanie iteratora i indeksu
  • Usuwanie podłoża
  • Zastąpienie podłoża
  • Wniosek

Identyfikacja i zwracanie substring

Klasa C ++ ma funkcję członka o nazwie, substr () dla sub-string (). Składnia to:

basic_string substr (size_type pos = 0, size_type n = npos) const

Ta funkcja zwraca podłoże jako obiekt ciągu. Pierwszy argument wskazuje pozycję indeksu, w której zaczyna się podstęp. Postać POS jest zawarta w podciągu. Drugi argument daje długość podłoża. Długość to liczba znaków zaczynających się od POS. Nie zawiera znaku dla wyższego indeksu. Wyższy wskaźnik to: POS + NPO (chociaż długość, NPO jest mierzone przesunięte jedno miejsce po lewej). Liczenie indeksu zaczyna się od zera. Poniższy program ilustruje użycie tej funkcji członka:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
String Substrin = Str.podaj (8, 5);
Cout << substrin << endl;
powrót 0;

Wyjście to:

trzy

Jeśli te dwa argumenty są nieobecne, cały ciąg jest rozważany, jak pokazano w następującym programie:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
String Substrin = Str.subster ();
Cout << substrin << endl;
powrót 0;

Wyjście to:

jeden dwa trzy cztery pięć

Zarezerwowane słowo, const na końcu składni, oznacza, że ​​funkcja substr () kopiuje substrowanie i zwraca je. Nie usuwa podtrefy.

Powiązanie iteratora i indeksu

Kiedy iterator wskazuje na postać, aby uzyskać iterator na koniec zakresu, wystarczy dodać długość (liczbę) znaków dla przedziału. Postać tego ostatniego iteratora nie jest uwzględniona w zakresie lub podłożu. Zakres i podłoże tutaj to te same rzeczy (są to samo powyżej). Dla funkcji elementu Substr () NPO to długość interwału.

Iterator odpowiadający zero indeksu jest:

str.zaczynać()

NPO można dodać do tego iteratora, aby wskazać ostatni element zakresu. Ostatni element lub ostatni charakter zasięgu nie jest częścią podłoża.

Iterator, który odpowiada punktowi tuż po ostatnim znaku łańcucha, to:

str.koniec()

NPO można odejść od tego, aby wskazać dowolny pożądany pierwszy znak ciągu.

początek () i end () są funkcjami członkowskimi klasy ciągów.

Usuwanie podłoża

Podłoże jest identyfikowane w obiekcie ciągów, z argumentami, POS i NPO funkcji substr (). Przypomnij sobie, że NPO jest przedziałem. Klasa ciągów ma również funkcję elementu o nazwie Erase (). Erase () jest w formularzach przeciążonych. Jedna z przeciążonych funkcji członka Erase () identyfikuje podłoże z POS i NPO. Składnia to:

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

Ta funkcja wymazania usuwa podłoże i zwraca oryginalny ciąg z usuniętą substringiem.

Tak więc, aby usunąć substring, funkcja substr () nie jest potrzebna. To jego argumenty są potrzebne. Aby usunąć podłoże, użyj funkcji wymierania obiektu String. Aby mieć kopię podłoża, po prostu użyj funkcji substr () przed usuwaniem. Poniższy program pokazuje dobry sposób na usunięcie podropu:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
String Substrin = Str.podaj (8, 5);
String ret = Str.usunąć (8, 5);
Cout <Cout <Cout <powrót 0;

Wyjście to:

trzy
One_two__four_five
One_two__four_five

Składnia do usunięcia substring z argumentami iteratorem jest:

Iterator Erase (Const_iterator pierwszy, Const_iterator Last)

Dzięki temu początek podjazdu jest najpierw identyfikowany przez iterator, odpowiadający indeksie, POS. Aby uzyskać koniec podłoża, iterator jest identyfikowany przez ostatni, który jest uzyskiwany przez wykonanie pierwszego + npos. Kodowanie do usunięcia pod substring za pomocą tego przeciążonego wariantu funkcji () pozostało jako ćwiczenie dla czytnika.

Zastąpienie podłoża

To, co naprawdę identyfikuje podłoże, to argumenty: POS i NPO. Aby zwrócić podłoże, użyj funkcji elementu klasy ciągnej, substr (). Aby usunąć podłoże, użyj funkcji elementu klasy String, Erase (). I aby zastąpić podłoże jedna z dowolnej długości, użyj funkcji elementu klasy String, zamień (). Funkcja zastępcza ma wiele przeciążonych wariantów. Ten, który używa indeksu, to:

Basic_String & Replain (size_type POS1, size_type n1, const t & t)

gdzie POS1 jest POS, N1 to NPO, a T jest niezależnym zestawem książek do wymiany. Zwraca oryginalny ciąg, w tym wymianę.

Uwaga: W C ++ nie należy usunąć (usunięcia), zanim zostanie wymieniony.
Poniższy program pokazuje dobry sposób na wymianę podłoża:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
char chs [] = "ccc";
String Substrin = Str.podaj (8, 5);
String ret = Str.Wymień (8, 5, CHS);
Cout <Cout <Cout <powrót 0;

Wyjście to:

trzy
One_two_ccc_four_five
One_two_ccc_four_five

Wymiana powyższego kodu miała długość mniej niż 5 znaków. Poniższy program pokazuje przypadek, w którym wymiana jest większa niż 5 znaków:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
char chs [] = "cccccccc";
String Substrin = Str.podaj (8, 5);
String ret = Str.Wymień (8, 5, CHS);
Cout <Cout <Cout <powrót 0;
trzy
One_Two_CCCCCCCC_FOUR_FIVE
One_Two_CCCCCCCC_FOUR_FIVE

Składnia zastąpienia podłańca argumentami iteratorem jest:

Basic_String & Replain (const_iterator i1, const_iterator i2, const t & t)

Z tą składnią początek substringu jest identyfikowany przez iterator, i1, który odpowiada indeksowi, POS. Aby uzyskać koniec podłoża, iterator jest identyfikowany przez i2, który jest uzyskiwany przez I1 + NPOS. t ma takie samo znaczenie jak powyżej. Poniższy program pokazuje, jak używać tej składni:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
string str = "one_two_three_four_five";
String :: const_iterator ITB = Str.zaczynać();
String :: const_iterator ITPOS = ITB + 8;
String :: const_iterator itnpos = ITPOS + 5;
char chs [] = "ccccc";
String Substrin = Str.podaj (8, 5);
String ret = Str.zamień (ITPOS, ITNPOS, CHS);
Cout <Cout <Cout <powrót 0;

Wyjście to:

trzy
One_two_ccccc_four_five
One_two_ccccc_four_five

Zauważ, że używane iteratory są stałymi iteratorami. Iterator, który odpowiada wskaźnikowi, POS, jest uzyskiwana z ITB + 8. Iterator, który odpowiada wyższemu wskaźnikowi, jest uzyskiwana z ITPO + 5.

Wniosek

Substring, podłoże lub zasięg to tylko część sekwencji znaków w dosłownym sznurku. Aby zwrócić podłoże, użyj funkcji elementu klasy ciągnej, substr (). Aby usunąć podłoże, użyj funkcji elementu klasy String, Erase (). Aby wymienić podłoże, użyj funkcji elementu klasy String, zamień (). Dla wszystkich tych funkcji argument indeksowy, POS i interwał indeksu, NPO, są kluczem do identyfikacji podkładu głównego ciągu.