Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Challenge: Accessing and Manipulating String Elements | Text Data Type
C++ Data Types

bookChallenge: Accessing and Manipulating String Elements

Indexing a string

We can access the elements of a string (which are essentially char characters) using square bracket [] indexing, similar to arrays. This also allows us to replace a character at a specific position.

indexing.h

indexing.h

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

Note

Indexing in a string starts from zero, just like in arrays.

The length of the string

With that indexing, you can try to access a wrong index (that is out of range), and the compiler will tell you nothing about that.

main.cpp

main.cpp

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

As you can see, the output is unexpected, and C++ does not provide a warning about the issue. To prevent this, you can use the .length() method to determine the length of a string and ensure the index is within the valid range.

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 }

Indexing using method

Another way of indexing is using the .at() method. To get the character with index n, we can use the following syntax:

at.h

at.h

copy
1
str.at(n);

It works the same as str[n] but will raise an error if you specify an index that is out of range.

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 }

Practice

As was said before, we can replace the characters inside a string using indexing (both with [] and .at()). Here is an example:

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

You have an email address as a string. Your task is to mask the username part of the email for privacy.

The function maskEmail takes a string representing the email address.

  1. Inside maskEmail, use the find method to locate the position of the '@' symbol, which marks the end of the username.
  2. Check if the username is longer than 1 character. If not, return the email unchanged.
  3. Use a for loop to iterate from index 1 up to (but not including) the position of '@'.
  4. Within the loop, replace each character with '*' to mask the username.
  5. Return the modified email.

Example

"alex@example.com" => "a***@example.com"
"bob@example.com" => "b**@example.com"
"x@domain.com" => "x@domain.com"

Løsning

solution.cpp

solution.cpp

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

Suggested prompts:

Can you show an example of replacing a character in a string?

What happens if I try to access an index that is out of range?

Can you explain the difference between using [] and .at() for indexing?

close

Awesome!

Completion rate improved to 4.35

bookChallenge: Accessing and Manipulating String Elements

Stryg for at vise menuen

Indexing a string

We can access the elements of a string (which are essentially char characters) using square bracket [] indexing, similar to arrays. This also allows us to replace a character at a specific position.

indexing.h

indexing.h

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

Note

Indexing in a string starts from zero, just like in arrays.

The length of the string

With that indexing, you can try to access a wrong index (that is out of range), and the compiler will tell you nothing about that.

main.cpp

main.cpp

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

As you can see, the output is unexpected, and C++ does not provide a warning about the issue. To prevent this, you can use the .length() method to determine the length of a string and ensure the index is within the valid range.

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 }

Indexing using method

Another way of indexing is using the .at() method. To get the character with index n, we can use the following syntax:

at.h

at.h

copy
1
str.at(n);

It works the same as str[n] but will raise an error if you specify an index that is out of range.

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 }

Practice

As was said before, we can replace the characters inside a string using indexing (both with [] and .at()). Here is an example:

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

You have an email address as a string. Your task is to mask the username part of the email for privacy.

The function maskEmail takes a string representing the email address.

  1. Inside maskEmail, use the find method to locate the position of the '@' symbol, which marks the end of the username.
  2. Check if the username is longer than 1 character. If not, return the email unchanged.
  3. Use a for loop to iterate from index 1 up to (but not including) the position of '@'.
  4. Within the loop, replace each character with '*' to mask the username.
  5. Return the modified email.

Example

"alex@example.com" => "a***@example.com"
"bob@example.com" => "b**@example.com"
"x@domain.com" => "x@domain.com"

Løsning

solution.cpp

solution.cpp

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

some-alt