Challenge: 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
12string 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
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
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
1str.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
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
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; }
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.
- Inside
maskEmail
, use thefind
method to locate the position of the'@'
symbol, which marks the end of the username. - Check if the username is longer than 1 character. If not, return the email unchanged.
- Use a
for
loop to iterate from index 1 up to (but not including) the position of'@'
. - Within the loop, replace each character with
'*'
to mask the username. - Return the modified email.
Example
"alex@example.com"
=> "a***@example.com"
"bob@example.com"
=> "b**@example.com"
"x@domain.com"
=> "x@domain.com"
Рішення
solution.cpp
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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?
Awesome!
Completion rate improved to 4.35
Challenge: 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
12string 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
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
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
1str.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
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
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; }
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.
- Inside
maskEmail
, use thefind
method to locate the position of the'@'
symbol, which marks the end of the username. - Check if the username is longer than 1 character. If not, return the email unchanged.
- Use a
for
loop to iterate from index 1 up to (but not including) the position of'@'
. - Within the loop, replace each character with
'*'
to mask the username. - Return the modified email.
Example
"alex@example.com"
=> "a***@example.com"
"bob@example.com"
=> "b**@example.com"
"x@domain.com"
=> "x@domain.com"
Рішення
solution.cpp
Дякуємо за ваш відгук!
single