Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Challenge: Søgning i Strenge | Section
C++ Datatyper
Sektion 1. Kapitel 11
single

single

bookChallenge: Søgning i Strenge

Stryg for at vise menuen

Metode find()

Nogle gange kan det være nødvendigt at søge efter specifik tekst i en string. Dette kan gøres ved hjælp af metoderne .find() eller .rfind(). Lad os starte med metoden .find().

find.h

find.h

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

Returnerer indekset for det første tegn i det første match.

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 også angive positionen for det første tegn i strengen, der skal medtages i søgningen. Dette kan gøres ved at bruge argumentet pos. Alle tegn før pos-indekset ignoreres i en søgning.

Her er et eksempel på at finde den første "code" startende fra det 3. tegn.

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 }

Metode rfind()

Det er også muligt at finde sidste forekomst af en tekst ved hjælp af .rfind()-metoden.

rfind.h

rfind.h

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

Mens .find() henter den første forekomst af tekst, finder .rfind() den sidste forekomst og står for 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
Bemærk

Når .find() eller .rfind() ikke kan finde understrengen, returnerer de string::npos. Dette er en numerisk konstant, der repræsenterer en ugyldig position. Den gemmes som den størst mulige size_t-værdi, hvilket gør det nemt at opdage mislykkede søgninger.

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; }
Opgave

Swipe to start coding

Du opretter et simpelt e-mailfilter. Dit mål er at tillade brugere at registrere sig med enhver e-mail og markere e-mails fra codefinity.com som tilladte.

Funktionen isAllowedEmail tager en email som string.

  1. Brug rfind() til at finde det sidste '@' symbol i e-mailen.
  2. Sammenlign resultatet af rfind med -1 for at kontrollere, om '@'-symbolet findes. Hvis der ikke findes et '@', returnér false, da e-mailen er ugyldig.
  3. Initialiser en strengvariabel domain som en tom streng.
  4. Brug en for-løkke, der starter fra atPos + 1 og op til længden af email for at iterere over tegnene efter '@'-symbolet.
  5. I hver iteration tilføjes tegnet til variablen domain.
  6. Hvis domain er lig med "codefinity.com", returnér true. Ellers returnér false.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 11
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt