Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Merkkijonojen Sisäinen Haku | Tekstimuotoinen tietotyyppi
C++ Tietotyypit
Osio 3. Luku 6
single

single

bookHaaste: Merkkijonojen Sisäinen Haku

Pyyhkäise näyttääksesi valikon

Metodi find()

Joskus voi olla tarpeen etsiä tiettyä tekstiä string-muuttujasta. Tämä onnistuu käyttämällä .find()- tai .rfind()-metodeja. Aloitetaan .find()-metodilla.

find.h

find.h

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

Palauttaa ensimmäisen osuman ensimmäisen merkin indeksin.

main.cpp

main.cpp

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

Voit myös määrittää merkkijonon ensimmäisen merkin sijainnin, josta haku aloitetaan. Tämä tehdään käyttämällä pos-argumenttia. Kaikki merkit ennen pos-indeksiä jätetään haussa huomiotta.

Tässä on esimerkki ensimmäisen "code"-esiintymän löytämisestä alkaen kolmannesta merkistä.

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 }

rfind()-metodi

Viimeisen esiintymän etsiminen tekstistä käyttämällä .rfind()-metodia.

rfind.h

rfind.h

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

Vaikka .find() hakee tekstin ensimmäisen esiintymän, .rfind() löytää viimeisen esiintymän ja tarkoittaa käänteistä hakua.

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
Huomio

Kun .find() tai .rfind() ei löydä osamerkkijonoa, ne palauttavat string::npos. Tämä on numeerinen vakio, joka edustaa virheellistä sijaintia. Se tallennetaan suurimpana mahdollisena size_t-arvona, mikä helpottaa epäonnistuneiden hakujen tunnistamista.

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; }
Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Rakennat yksinkertaista sähköpostisuodatinta. Tavoitteena on antaa käyttäjien rekisteröityä millä tahansa sähköpostilla ja sallia sähköpostit, joiden domain on codefinity.com.

Funktio isAllowedEmail ottaa parametrina email-merkkijonon tyypiltään string.

  1. Käytä rfind()-funktiota löytääksesi sähköpostiosoitteen viimeisen '@'-merkin.
  2. Vertaa rfind-funktion tulosta arvoon -1 tarkistaaksesi, löytyykö '@'-merkki. Jos '@'-merkkiä ei löydy, palauta false, koska sähköposti on virheellinen.
  3. Alusta merkkijonovariable domain tyhjäksi merkkijonoksi.
  4. Käytä for-silmukkaa alkaen kohdasta atPos + 1 aina merkkijonon email pituuteen asti käydäksesi läpi kaikki merkit '@'-merkin jälkeen.
  5. Jokaisella silmukan kierroksella lisää merkki domain-muuttujaan.
  6. Jos domain on yhtä kuin "codefinity.com", palauta true. Muussa tapauksessa palauta false.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 6
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt