Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Utmaning: Åtkomst till och Manipulering av Strängelement | Textdatatyp
Practice
Projects
Quizzes & Challenges
Frågesporter
Challenges
/
C++-Datatyper
close
Avsnitt 3. Kapitel 3
single

single

bookUtmaning: Åtkomst till och Manipulering av Strängelement

Svep för att visa menyn

Indexering av en sträng

Vi kan komma åt elementen i en string (som i grunden är char-tecken) med hjälp av hakparenteser [] för indexering, liknande som för arrayer. Detta gör det också möjligt att ersätta ett tecken på en specifik position.

indexing.h

indexing.h

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

Indexeringen i en string börjar från noll, precis som i arrayer.

Strängens längd

Med denna indexering kan du försöka komma åt ett felaktigt index (utanför intervallet), och kompilatorn kommer inte att varna dig om detta.

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 är utdata oväntad, och C++ ger ingen varning om problemet. För att undvika detta kan du använda metoden .length() för att bestämma längden på en string och säkerställa att indexet är inom giltigt intervall.

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 }

Indexering med metod

Ett annat sätt att indexera är att använda metoden .at(). För att hämta tecknet med index n kan vi använda följande syntax:

at.h

at.h

copy
1
str.at(n);

Det fungerar på samma sätt som str[n] men kommer att ge ett felmeddelande om du anger ett index som är utanför intervallet.

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 }

Övning

Som nämnts tidigare kan vi ersätta tecken i en sträng med hjälp av indexering (både med [] och .at()). Här är ett exempel:

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

Swipe to start coding

Du har en e-postadress som en sträng. Din uppgift är att maskera användarnamnsdelen av e-postadressen för att skydda integriteten.

Funktionen maskEmail tar en sträng som representerar e-postadressen.

  1. Inuti maskEmail, använd metoden find för att hitta positionen för '@'-symbolen, som markerar slutet på användarnamnet.
  2. Kontrollera om användarnamnet är längre än 1 tecken. Om inte, returnera e-postadressen oförändrad.
  3. Använd en for-loop för att iterera från index 1 upp till (men inte inklusive) positionen för '@'.
  4. Inuti loopen, ersätt varje tecken med '*' för att maskera användarnamnet.
  5. Returnera den modifierade e-postadressen.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt