Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Challenge: Merkkijonoelementtien Käsittely ja Muokkaus | Section
C++-Tietotyypit
Osio 1. Luku 8
single

single

bookChallenge: Merkkijonoelementtien Käsittely ja Muokkaus

Pyyhkäise näyttääksesi valikon

Merkkijonon indeksointi

Merkkijonon (string) alkioihin (jotka ovat käytännössä char-merkkejä) pääsee käsiksi hakasulkeilla [], samalla tavalla kuin taulukoissa. Tämän avulla voidaan myös korvata merkki tietyssä kohdassa.

indexing.h

indexing.h

copy
12
string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Note
Huomio

Indeksointi string-tyypissä alkaa nollasta, kuten taulukoissakin.

Merkkijonon pituus

Tällä indeksoinnilla voit yrittää käyttää väärää indeksiä (joka on alueen ulkopuolella), eikä kääntäjä ilmoita siitä mitään.

main.cpp

main.cpp

copy
1234567
#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }

Kuten huomaat, tulos on odottamaton, eikä C++ anna varoitusta ongelmasta. Tämän estämiseksi voit käyttää .length()-metodia selvittääksesi string-tyyppisen muuttujan pituuden ja varmistaa, että indeksi on sallitulla alueella.

main.cpp

main.cpp

copy
123456789101112
#include <iostream> int main() { std::string word = "Codefinity"; int index = 12; if (index >= word.length()) std::cout << "The output is unexpected!" << std::endl; else std::cout << word[index]; // Word's length is 10 }

Indeksointi metodilla

Toinen tapa indeksoida on käyttää .at()-metodia. Saadaksesi merkin indeksillä n, voidaan käyttää seuraavaa syntaksia:

at.h

at.h

copy
1
str.at(n);

Toimii samalla tavalla kuin str[n], mutta aiheuttaa virheen, jos määrität indeksin, joka on alueen ulkopuolella.

main.cpp

main.cpp

copy
12345678
#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word.at(12); // word's length is 10 // Try outputting the character with the index 5 }

Harjoitus

Kuten aiemmin mainittiin, merkkijonon merkkejä voidaan korvata indeksoinnin avulla (sekä [] että .at() -menetelmällä). Tässä on esimerkki:

main.cpp

main.cpp

copy
123456789
#include <iostream> int main() { std::string word = "Cpdefinitu"; word[1] = 'o'; word.at(word.length() - 1) = 'y'; // length - 1 accesses the last element std::cout << word; }
Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Sinulla on sähköpostiosoite merkkijonona. Tehtävänäsi on peittää käyttäjätunnuksen osa sähköpostista yksityisyyden suojaamiseksi.

Funktio maskEmail ottaa merkkijonon, joka edustaa sähköpostiosoitetta.

  1. Käytä maskEmail-funktion sisällä find-metodia löytääksesi '@'-merkin sijainnin, joka osoittaa käyttäjätunnuksen lopun.
  2. Tarkista, onko käyttäjätunnus pidempi kuin 1 merkki. Jos ei ole, palauta sähköposti muuttumattomana.
  3. Käytä for-silmukkaa iteroidaksesi indeksistä 1 aina (mutta ei mukaan lukien) '@'-merkin sijaintiin.
  4. Silmukan sisällä korvaa jokainen merkki '*'-merkillä peittääksesi käyttäjätunnuksen.
  5. Palauta muokattu sähköpostiosoite.

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 8
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

some-alt