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

single

bookUdfordring: Adgang til og Manipulation af Streng-Elementer

Stryg for at vise menuen

Indeksering af en string

Vi kan få adgang til elementerne i en string (som i bund og grund er char-tegn) ved at bruge firkantede parenteser [] til indeksering, 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.

Længden af strengen

Med denne indeksering kan du forsøge at tilgå et forkert indeks (uden for rækkevidde), og compileren vil ikke give dig nogen advarsel 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 ikke nogen advarsel om problemet. For at forhindre 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 brug 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);

Det 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 erstatte 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 brugernavnsdelen af e-mailen af hensyn til privatlivets fred.

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

  1. Inden i maskEmail, brug find-metoden til at finde positionen af '@'-symbolet, som markerer slutningen af brugernavnet.
  2. Tjek 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, erstat 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 3. Kapitel 3
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