Треки
/
C++
C++
/
Вправи
/
Рівні журналу
Рівні журналу

Рівні журналу

Навчальна вправа

Вступ

Включення

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

Директива include

Щоб включити вміст інших файлів, C++ використовує директиву include. Такі включення слід розміщувати на початку файлу. Під час компіляції рядок із директивою замінюється вмістом відповідного файлу. Простори імен після включень зберігаються такими, якими вони були у вихідному файлі.

Стандартна бібліотека

Стандартна бібліотека пропонує багато поширених функцій, алгоритмів і структур даних. Стандартна бібліотека використовує простір імен std.

Один із прикладів - бібліотека числових обчислень cmath. Вона надає багато поширених математичних операцій.

#include <cmath>

int cube_me(int a) {
    // raise `a` to the third power
    return std::pow(a, 3);
}
Note

Стандартні бібліотеки включають за допомогою кутових дужок <>, а не подвійних лапок ". Різниця полягає в місці, де компілятор шукає відповідні файли. Для варіанта з кутовими дужками пошук у поточному проєкті пропускається, і пошук одразу починається в системних каталогах включень. Якщо треба включити локальні файли, використовують подвійні лапки: #include "myfile"

Рядки тексту (англ. string)

string у C++ - це змінний обʼєкт, який представляє текст як послідовність символів (літер, цифр, розділових знаків тощо). Рядками тексту керують, викликаючи методи цього рядка.

Бібліотека рядків

У C++ тип рядка тексту та повʼязані з ним функції потрібно перед використанням включити з бібліотеки рядків. Це можна зробити, додавши #include <string> на початок файлу. Тоді вони наповнять простір імен std. Повністю кваліфікована назва типу рядка тексту - std::string. Рядковий літерал використовує символ подвійних лапок: ".

#include <string>
std::string w_berry_quote{"A well-made sentence, I think, is a thing of beauty."};

Поширені операції з рядками тексту

Оператор + дає змогу конкатенувати рядки тексту:

std::string original_title{"The School of Rock"};
std::string sequel_indicator{"Electric Boogaloo"};
std::string next_movie_title = original_title + " 2: " + sequel_indicator;

Щоб користуватися бібліотекою рядків, треба знати, що можна викликати функцію, яка належить обʼєкту. Такі функції називаються функціями-членами. Пізніше в силабусі ми дізнаємося більше про функції-члени та повʼязане з ними поняття класу.

std::string qualification{"awesome"};
// 1st argument: from the index to the end of the string:
std::string who_is_awesome = qualification.substr(5);
// => "me"

// 2nd optional argument for the length:
std::string material{"haunted books"};
std::string ghost = material.substr(8, 3);
// => "boo"

Функція find теж дуже корисна. Її викликають як функцію-член на рядку тексту, і вона приймає рядок тексту як аргумент. find повертає позицію з нульовим індексом першого входження в рядку тексту.

std::string new_release{"apple released a new app!"};
new_release.find("app");
// => 0
new_release.find("e");
// => 4

Вказівки

У цій вправі ми будемо обробляти рядки із записаного звіту. Кожен рядок журналу - це рядок тексту (англ. string) такого формату: "[<LEVEL>]: <MESSAGE>".

Існує три різні рівні логування:

  • INFO
  • WARNING
  • ERROR

На нас чекають три завдання, кожне з яких приймає рядок журналу й просить щось із ним зробити.

1. Отримати повідомлення з рядка журналу

Реалізуйте метод log_line::message, щоб він повертав повідомлення рядка журналу:

log_line::message("[ERROR]: Invalid operation")
// => "Invalid operation"

2. Отримати рівень логування з рядка журналу

Реалізуйте метод log_line::log_level, щоб він повертав рівень логування рядка журналу, причому у верхньому регістрі:

log_line::log_level("[ERROR]: Invalid operation")
// => "ERROR"

3. Переформатувати рядок журналу

Реалізуйте метод log_line::reformat, який переформатовує рядок журналу, ставлячи повідомлення першим, а рівень логування після нього в дужках:

log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C++ Exercism

Час розпочати Рівні журналу?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.