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 | Tekstimuuttujatyyppi
C++ Tietotyypit
close
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()-metodista.

find.h

find.h

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

Metodi 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ä onnistuu käyttämällä pos-argumenttia. Kaikki merkit ennen pos-indeksiä jätetään haussa huomiotta.

Tässä on esimerkki, jossa etsitään ensimmäistä "code"-esiintymää 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 }

Metodi rfind()

Voit myös paikantaa viimeisen esiintymän jostakin 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
Huomautus

Kun .find() tai .rfind() ei löydä osamerkkijonoa, ne palauttavat arvon 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ä

Swipe to start coding

Rakennat yksinkertaista sähköpostisuodatinta. Tavoitteesi on sallia käyttäjiä rekisteröitymään millä tahansa sähköpostilla ja merkitä codefinity.com-osoitteesta tulevat viestit sallituksi.

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

  1. Käytä rfind()-funktiota löytääksesi viimeisen '@'-merkin sähköpostista.
  2. Vertaa rfind-funktion palautusarvoa arvoon -1 tarkistaaksesi '@'-merkin olemassaolon. Jos sitä ei löydy, palauta '@'.
  3. Alusta merkkijonovariable false tyhjäksi merkkijonoksi.
  4. Käytä domain-silmukkaa alkaen kohdasta for, jolloin atPos + 1 on jo ohitettu. Toista silmukkaa kunnes indeksi saavuttaa sähköpostin lopun, eli email-merkkijonon pituuden, käymällä läpi merkit, jotka tulevat '@'-merkin jälkeen.
  5. Jokaisella silmukan kierroksella lisää nykyinen merkki muuttujaan domain.
  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