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 | Section
C++-Tietotyypit
Osio 1. Luku 11
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 huomiotta haussa.

Tässä on esimerkki ensimmäisen "code"-merkkijonon 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()-menetelmä

Viimeisen esiintymän etsiminen tekstistä onnistuu myös käyttämällä .rfind()-menetelmää.

rfind.h

rfind.h

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

Kun .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 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ä

Pyyhkäise aloittaaksesi koodauksen

Rakennat yksinkertaista sähköpostisuodatinta. Tavoitteenasi on antaa käyttäjien rekisteröityä millä tahansa sähköpostilla ja merkitä codefinity.com-domeinista tulevat viestit sallituksi.

Funktio isAllowedEmail ottaa parametrina email-merkkijonon tyyppiä string.

  1. Käytä rfind()-metodia löytääksesi viimeisen esiintymän kohdasta '@'.
  2. Vertaa rfind-metodin tulosta arvoon -1 tarkistaaksesi, löytyykö '@'. Jos '@'-merkkiä ei löydy, palauta false.
  3. Alusta merkkijonomuuttuja domain tyhjäksi merkkijonoksi.
  4. Käytä for-silmukkaa, aloita indeksistä atPos + 1 ja jatka aina email-kohtaan asti – näin huomioit '@'-merkin jälkeiset merkit.
  5. Jokaisella silmukan kierroksella lisää nykyinen 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 1. Luku 11
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

some-alt