Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Søgning i Strenge | Tekstdatatypen
C++ Datatyper
close
Sektion 3. Kapitel 6
single

single

bookUdfordring: 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 .find()-metoden.

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 gøres ved hjælp af 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 at bruge .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 en 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. Initialisér 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 '@'.
  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 3. Kapitel 6
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