Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Utmaning: Sökning Inom Strängar | Textdatatyp
C++-Datatyper
close
Avsnitt 3. Kapitel 6
single

single

bookUtmaning: Sökning Inom Strängar

Svep för att visa menyn

Metod find()

Ibland kan det vara nödvändigt att söka efter specifik text i en string. Detta kan göras med hjälp av metoderna .find() eller .rfind(). Vi börjar med metoden .find().

find.h

find.h

copy
1
str.find("text to find")

Returnerar index för första tecknet i första träffen.

main.cpp

main.cpp

copy
1234567
#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; // (code)codefinity }

Du kan också ange positionen för det första tecknet i strängen som ska beaktas vid sökningen. Detta görs med argumentet pos. Alla tecken före indexet pos ignoreras vid en sökning.

Här är ett exempel på att hitta första "code" med start från det tredje tecknet.

main.cpp

main.cpp

copy
1234567
#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code", 3) << std::endl; // __de(code)finity }

Metod rfind()

Det går även att hitta sista förekomsten av en text med metoden .rfind().

rfind.h

rfind.h

copy
1
str.rfind("text to find")

Medan .find() hämtar första förekomsten av text, hittar .rfind() sista förekomsten och står för reverse find.

main.cpp

main.cpp

copy
12345678
#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; std::cout << str.rfind("code") << std::endl; }
Note
Observera

När .find() eller .rfind() inte kan hitta delsträngen returnerar de string::npos. Detta är en numerisk konstant som representerar en ogiltig position. Den lagras som det största möjliga värdet för size_t, vilket gör det enkelt att upptäcka misslyckade sökningar.

main.cpp

main.cpp

copy
12345678
#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.rfind("abc") << std::endl; std::cout << std::string::npos << std::endl; }
Uppgift

Swipe to start coding

Du bygger ett enkelt e-postfilter. Målet är att tillåta användare att registrera sig med valfri e-postadress och markera e-postadresser från codefinity.com som tillåtna.

Funktionen isAllowedEmail tar en email som en string.

  1. Använd rfind() för att hitta den sista '@'-symbolen i e-postadressen.
  2. Jämför resultatet från rfind med -1 för att kontrollera om '@'-symbolen finns. Om ingen '@' hittas, returnera false eftersom e-postadressen är ogiltig.
  3. Initiera en strängvariabel domain som en tom sträng.
  4. Använd en for-loop som börjar från atPos + 1 upp till längden av email för att iterera över tecknen efter '@'.
  5. Vid varje iteration, lägg till tecknet i variabeln domain.
  6. Om domain är lika med "codefinity.com", returnera true. Annars returnera false.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 6
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt