Trilhas
/
C++
C++
/
Exercícios
/
Níveis de log
Níveis de log

Níveis de log

Exercício de aprendizagem

Introdução

Includes

Em geral, você não quer reinventar a roda quando o assunto é programação. Para muitos algoritmos padrão, provavelmente já existe alguém que pode ter feito o seu trabalho por você.

A diretiva include

Para incluir o conteúdo de outros arquivos, o C++ usa a diretiva include. Esses includes devem ser declarados no topo do arquivo. Durante a compilação, a linha com a diretiva é substituída pelo conteúdo do arquivo correspondente. Os namespaces são mantidos como estão no arquivo original depois dos includes.

A biblioteca padrão

A biblioteca padrão oferece muitas funções, algoritmos e estruturas de dados comuns. A biblioteca padrão usa o namespace std.

Um exemplo é a biblioteca numérica do C, cmath. Ela fornece muitas operações matemáticas comuns.

#include <cmath>

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

As bibliotecas padrão são incluídas com sinais de maior e menor <> em vez de aspas duplas ". A diferença está no local onde o compilador procura os arquivos correspondentes. Na versão com sinais de maior e menor, a busca no projeto atual é ignorada e o compilador começa diretamente nos diretórios de includes do sistema. Se você quiser incluir arquivos locais, use aspas duplas: #include "myfile"

Strings

Uma string em C++ é um objeto mutável que representa texto como uma sequência de caracteres (letras, dígitos, pontuação etc.). As strings são manipuladas chamando os métodos da string.

A biblioteca de strings

Em C++, o tipo string e as funções associadas precisam ser incluídos da biblioteca de strings antes do uso. Você pode fazer isso adicionando #include <string> ao topo do seu arquivo. Eles então populam o namespace std. O nome totalmente qualificado do tipo string é std::string. O literal de string usa o caractere de aspas duplas: ".

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

Operações comuns com strings

Você pode usar o operador + para concatenar strings:

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

Para usar a biblioteca de strings, você precisa saber que é possível chamar uma função que pertence a um objeto. Essas são chamadas de funções membro. Mais adiante no curso, você vai aprender mais sobre funções membro e o conceito de classe relacionado.

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"

A função find também é muito útil. Ela é chamada como uma função membro da string e recebe uma string como argumento. find retorna a posição, com índice a partir de zero, da primeira ocorrência na string.

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

Instruções

Neste exercício, você vai processar linhas de um relatório de log. Cada linha de log é uma string formatada assim: "[<LEVEL>]: <MESSAGE>".

Existem três níveis de log diferentes:

  • INFO
  • WARNING
  • ERROR

Você tem três tarefas, e cada uma delas recebe uma linha de log e pede que você faça algo com ela.

1. Obter a mensagem de uma linha de log

Implemente o método log_line::message para retornar a mensagem de uma linha de log:

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

2. Obter o nível de log de uma linha de log

Implemente o método log_line::log_level para retornar o nível de log de uma linha de log, que deve ser retornado em letras maiúsculas:

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

3. Reformatar uma linha de log

Implemente o método log_line::reformat, que reformata a linha de log, colocando a mensagem primeiro e o nível de log depois dela, entre parênteses:

log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Editar via GitHub O link abre em uma nova janela ou aba
C++ Exercism

Tudo pronto para começar Níveis de log?

Crie sua conta no Exercism para aprender e dominar C++ com 19 conceitos100 exercícios e mentoria humana de verdade, tudo de graça.