Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Challenge: Adgang til og Manipulation af Streng-Elementer | Section
C++ Datatyper
Sektion 1. Kapitel 8
single

single

bookChallenge: Adgang til og Manipulation af Streng-Elementer

Stryg for at vise menuen

Indeksering af en string

Elementerne i en string (som i bund og grund er char-tegn) kan tilgås ved hjælp af firkantede parenteser [], ligesom med arrays. Dette gør det også muligt at udskifte et tegn på en bestemt position.

indexing.h

indexing.h

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

Indeksering i en string starter fra nul, ligesom i arrays.

Strenglængde

Med denne indeksering kan du forsøge at tilgå et forkert indeks (uden for rækkevidde), og compileren vil ikke advare dig om dette.

main.cpp

main.cpp

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

Som du kan se, er outputtet uventet, og C++ giver ingen advarsel om problemet. For at undgå dette kan du bruge .length()-metoden til at bestemme længden af en string og sikre, at indekset er inden for det gyldige område.

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 }

Indeksering ved hjælp af metode

En anden måde at indeksere på er ved at bruge .at()-metoden. For at få tegnet med indeks n, kan vi bruge følgende syntaks:

at.h

at.h

copy
1
str.at(n);

Fungerer på samme måde som str[n], men vil give en fejl, hvis du angiver et indeks, der er uden for rækkevidde.

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 }

Øvelse

Som nævnt tidligere kan vi udskifte tegnene i en streng ved hjælp af indeksering (både med [] og .at()). Her er et eksempel:

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; }
Opgave

Swipe to start coding

Du har en e-mailadresse som en streng. Din opgave er at maskere brugernavnet i e-mailen af hensyn til privatlivets fred.

Funktionen maskEmail modtager en streng, der repræsenterer e-mailadressen.

  1. Inden i maskEmail skal du bruge metoden find til at finde positionen af '@'-symbolet, som markerer slutningen af brugernavnet.
  2. Kontroller, om brugernavnet er længere end 1 tegn. Hvis ikke, returneres e-mailen uændret.
  3. Brug en for-løkke til at iterere fra indeks 1 op til (men ikke inklusive) positionen af '@'.
  4. Inden i løkken skal du erstatte hvert tegn med '*' for at maskere brugernavnet.
  5. Returnér den modificerede e-mail.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 8
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt