Завдання: Доступ і Маніпулювання Елементами Рядка
Індексування рядка
Можна отримати доступ до елементів string (які фактично є символами типу char) за допомогою індексування у квадратних дужках [], подібно до масивів. Це також дозволяє замінювати символ на певній позиції.
indexing.h
12string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Індексування у string починається з нуля, як і у масивах.
Довжина рядка
Через таку індексацію можна спробувати звернутися до неправильного індексу (який виходить за межі діапазону), і компілятор не повідомить про цю помилку.
main.cpp
1234567#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }
Як видно, результат є неочікуваним, і C++ не попереджає про цю проблему. Щоб уникнути цього, можна використовувати метод .length() для визначення довжини string і переконатися, що індекс знаходиться у допустимому діапазоні.
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 }
Індексування за допомогою методу
Інший спосіб індексування — використання методу .at(). Щоб отримати символ з індексом n, можна використати наступний синтаксис:
at.h
1str.at(n);
Працює так само, як і str[n], але викликає помилку, якщо вказати індекс, що виходить за межі рядка.
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 }
Практика
Як вже зазначалося раніше, можна замінювати символи всередині рядка за допомогою індексації (як через [], так і через .at()). Ось приклад:
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
У вас є електронна адреса у вигляді рядка. Ваше завдання — замаскувати частину імені користувача для забезпечення конфіденційності.
Функція maskEmail приймає рядок, що представляє електронну адресу.
- Усередині
maskEmailвикористайте методfindдля визначення позиції символу'@', який позначає кінець імені користувача. - Перевірте, чи довжина імені користувача більша за 1 символ. Якщо ні — поверніть електронну адресу без змін.
- Використайте цикл
forдля ітерації від індексу 1 до (але не включаючи) позиції'@'. - Усередині циклу замініть кожен символ на
'*'для маскування імені користувача. - Поверніть змінений рядок електронної адреси.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Чудово!
Completion показник покращився до 4.35
Завдання: Доступ і Маніпулювання Елементами Рядка
Свайпніть щоб показати меню
Індексування рядка
Можна отримати доступ до елементів string (які фактично є символами типу char) за допомогою індексування у квадратних дужках [], подібно до масивів. Це також дозволяє замінювати символ на певній позиції.
indexing.h
12string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Індексування у string починається з нуля, як і у масивах.
Довжина рядка
Через таку індексацію можна спробувати звернутися до неправильного індексу (який виходить за межі діапазону), і компілятор не повідомить про цю помилку.
main.cpp
1234567#include <iostream> int main() { std::string word = "Codefinity"; std::cout << word[12]; // Word's length is 10 }
Як видно, результат є неочікуваним, і C++ не попереджає про цю проблему. Щоб уникнути цього, можна використовувати метод .length() для визначення довжини string і переконатися, що індекс знаходиться у допустимому діапазоні.
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 }
Індексування за допомогою методу
Інший спосіб індексування — використання методу .at(). Щоб отримати символ з індексом n, можна використати наступний синтаксис:
at.h
1str.at(n);
Працює так само, як і str[n], але викликає помилку, якщо вказати індекс, що виходить за межі рядка.
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 }
Практика
Як вже зазначалося раніше, можна замінювати символи всередині рядка за допомогою індексації (як через [], так і через .at()). Ось приклад:
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
У вас є електронна адреса у вигляді рядка. Ваше завдання — замаскувати частину імені користувача для забезпечення конфіденційності.
Функція maskEmail приймає рядок, що представляє електронну адресу.
- Усередині
maskEmailвикористайте методfindдля визначення позиції символу'@', який позначає кінець імені користувача. - Перевірте, чи довжина імені користувача більша за 1 символ. Якщо ні — поверніть електронну адресу без змін.
- Використайте цикл
forдля ітерації від індексу 1 до (але не включаючи) позиції'@'. - Усередині циклу замініть кожен символ на
'*'для маскування імені користувача. - Поверніть змінений рядок електронної адреси.
Рішення
Дякуємо за ваш відгук!
single