Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Завдання: Доступ і Маніпулювання Елементами Рядка | Текстовий Тип Даних
Типи Даних у C++

bookЗавдання: Доступ і Маніпулювання Елементами Рядка

Індексування рядка

Можна отримати доступ до елементів string (які фактично є символами типу char) за допомогою індексування у квадратних дужках [], подібно до масивів. Це також дозволяє замінювати символ на певній позиції.

indexing.h

indexing.h

copy
12
string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Note
Примітка

Індексування у string починається з нуля, як і у масивах.

Довжина рядка

Через таку індексацію можна спробувати звернутися до неправильного індексу (який виходить за межі діапазону), і компілятор не повідомить про цю помилку.

main.cpp

main.cpp

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

Як видно, результат є неочікуваним, і C++ не попереджає про цю проблему. Щоб уникнути цього, можна використовувати метод .length() для визначення довжини string і переконатися, що індекс знаходиться у допустимому діапазоні.

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 }

Індексування за допомогою методу

Інший спосіб індексування — використання методу .at(). Щоб отримати символ з індексом n, можна використати наступний синтаксис:

at.h

at.h

copy
1
str.at(n);

Працює так само, як і str[n], але викликає помилку, якщо вказати індекс, що виходить за межі рядка.

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 }

Практика

Як вже зазначалося раніше, можна замінювати символи всередині рядка за допомогою індексації (як через [], так і через .at()). Ось приклад:

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; }
Завдання

Swipe to start coding

У вас є електронна адреса у вигляді рядка. Ваше завдання — замаскувати частину імені користувача для забезпечення конфіденційності.

Функція maskEmail приймає рядок, що представляє електронну адресу.

  1. Усередині maskEmail використайте метод find для визначення позиції символу '@', який позначає кінець імені користувача.
  2. Перевірте, чи довжина імені користувача більша за 1 символ. Якщо ні — поверніть електронну адресу без змін.
  3. Використайте цикл for для ітерації від індексу 1 до (але не включаючи) позиції '@'.
  4. Усередині циклу замініть кожен символ на '*' для маскування імені користувача.
  5. Поверніть змінений рядок електронної адреси.

Рішення

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

close

bookЗавдання: Доступ і Маніпулювання Елементами Рядка

Свайпніть щоб показати меню

Індексування рядка

Можна отримати доступ до елементів string (які фактично є символами типу char) за допомогою індексування у квадратних дужках [], подібно до масивів. Це також дозволяє замінювати символ на певній позиції.

indexing.h

indexing.h

copy
12
string str = "Cpdefinity"; // Cpdefinity str[1] = 'o'; // Codefinity
Note
Примітка

Індексування у string починається з нуля, як і у масивах.

Довжина рядка

Через таку індексацію можна спробувати звернутися до неправильного індексу (який виходить за межі діапазону), і компілятор не повідомить про цю помилку.

main.cpp

main.cpp

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

Як видно, результат є неочікуваним, і C++ не попереджає про цю проблему. Щоб уникнути цього, можна використовувати метод .length() для визначення довжини string і переконатися, що індекс знаходиться у допустимому діапазоні.

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 }

Індексування за допомогою методу

Інший спосіб індексування — використання методу .at(). Щоб отримати символ з індексом n, можна використати наступний синтаксис:

at.h

at.h

copy
1
str.at(n);

Працює так само, як і str[n], але викликає помилку, якщо вказати індекс, що виходить за межі рядка.

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 }

Практика

Як вже зазначалося раніше, можна замінювати символи всередині рядка за допомогою індексації (як через [], так і через .at()). Ось приклад:

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; }
Завдання

Swipe to start coding

У вас є електронна адреса у вигляді рядка. Ваше завдання — замаскувати частину імені користувача для забезпечення конфіденційності.

Функція maskEmail приймає рядок, що представляє електронну адресу.

  1. Усередині maskEmail використайте метод find для визначення позиції символу '@', який позначає кінець імені користувача.
  2. Перевірте, чи довжина імені користувача більша за 1 символ. Якщо ні — поверніть електронну адресу без змін.
  3. Використайте цикл for для ітерації від індексу 1 до (але не включаючи) позиції '@'.
  4. Усередині циклу замініть кожен символ на '*' для маскування імені користувача.
  5. Поверніть змінений рядок електронної адреси.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 3
single

single

some-alt