single
Haaste: 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
1str.find("text to find")
Palauttaa ensimmäisen osuman ensimmäisen merkin indeksin.
main.cpp
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
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
1str.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
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.find("code") << std::endl; std::cout << str.rfind("code") << std::endl; }
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
12345678#include <iostream> int main() { std::string str = "codecodefinity"; std::cout << str.rfind("abc") << std::endl; std::cout << std::string::npos << std::endl; }
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.
- Käytä
rfind()-funktiota löytääksesi sähköpostiosoitteen viimeisen'@'-merkin. - Vertaa
rfind-funktion tulosta arvoon-1tarkistaaksesi, löytyykö'@'-merkki. Jos'@'-merkkiä ei löydy, palautafalse, koska sähköposti on virheellinen. - Alusta merkkijonovariable
domaintyhjäksi merkkijonoksi. - Käytä
for-silmukkaa alkaen kohdastaatPos + 1aina merkkijononemailpituuteen asti käydäksesi läpi kaikki merkit'@'-merkin jälkeen. - Jokaisella silmukan kierroksella lisää merkki
domain-muuttujaan. - Jos
domainon yhtä kuin"codefinity.com", palautatrue. Muussa tapauksessa palautafalse.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme