Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Utfordring: Søk i Strenger | Tekstdatatypen
C++ Datatyper
close
Seksjon 3. Kapittel 6
single

single

bookUtfordring: Søk i Strenger

Sveip for å vise menyen

Metode find()

Noen ganger kan det være nødvendig å søke etter spesifikk tekst i en string. Dette kan gjøres ved å bruke metodene .find() eller .rfind(). La oss starte med .find()-metoden.

find.h

find.h

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

Returnerer indeksen til det første tegnet i det første treffet.

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å angi posisjonen til det første tegnet i strengen som skal vurderes i søket. Dette kan gjøres ved å bruke argumentet pos. Alle tegn før pos-indeksen ignoreres i søket.

Her er et eksempel på å finne den første "code" fra og med det tredje tegnet.

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()

Du kan også finne siste forekomst av en tekst ved å bruke .rfind()-metoden.

rfind.h

rfind.h

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

Mens .find() henter det første forekomsten av tekst, finner .rfind() den siste forekomsten 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
Merk

Når .find() eller .rfind() ikke finner delstrengen, returnerer de string::npos. Dette er en numerisk konstant som representerer en ugyldig posisjon. Den lagres som den største mulige size_t-verdien, noe som gjør det enkelt å oppdage mislykkede søk.

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

Swipe to start coding

Du utvikler et enkelt e-postfilter. Målet ditt er å tillate brukere å registrere seg med hvilken som helst e-postadresse og merke e-poster fra codefinity.com som tillatt.

Funksjonen isAllowedEmail tar inn en email som en string.

  1. Bruk rfind() for å finne siste '@'-symbol i e-posten.
  2. Sammenlign resultatet fra rfind med -1 for å sjekke om '@'-symbolet finnes. Hvis ingen '@' finnes, returner false fordi e-posten er ugyldig.
  3. Initialiser en strengvariabel domain som en tom streng.
  4. Bruk en for-løkke som starter fra atPos + 1 og går opp til lengden av email for å iterere over tegnene etter '@'.
  5. I hver iterasjon, legg til tegnet i variabelen domain.
  6. Hvis domain er lik "codefinity.com", returner true. Ellers returner false.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 6
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

some-alt