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

Níveis de log

Exercício de aprendizagem

Introdução

Inclusões

Em geral, não queres reinventar a roda quando se trata de programação. Para muitos algoritmos padrão, é provável que já alguém tenha feito esse trabalho por ti.

A diretiva include

Para incluir o conteúdo de outros ficheiros, o C++ usa a diretiva include. Estas inclusões devem ser declaradas no topo do ficheiro. Durante a compilação, a linha com a diretiva é substituída pelo conteúdo do ficheiro correspondente. Depois das inclusões, os namespaces mantêm-se tal como estão no ficheiro original.

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 de funções numéricas do C, cmath. 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 os sinais de menor e maior <> em vez de aspas duplas ". A diferença está no local onde o compilador procura os ficheiros correspondentes. Na versão com os sinais de menor e maior, a procura no projeto atual é ignorada e começa diretamente nos diretórios de inclusão do sistema. Se quiseres incluir ficheiros locais, usas aspas duplas: #include "myfile"

Strings

Uma string em C++ é um objeto mutável que representa texto como uma sequência de carateres (letras, algarismos, pontuação, etc.). As strings manipulam-se através da chamada dos métodos da string.

A biblioteca de strings

Em C++, tens de incluir o tipo string e as funções associadas a partir da biblioteca de strings antes de os usares. Podes fazê-lo adicionando #include <string> no topo do teu ficheiro. Ficam então disponíveis no namespace std. O nome completo do tipo string é std::string. O literal de string usa o caráter das 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

Podes 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 usares a biblioteca de strings, precisas de saber que é possível chamar uma função que pertence a um objeto. Estas chamam-se funções membro. Mais à frente no programa de estudos, vais aprender mais sobre funções membro e o conceito de classe associado.

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. É chamada como função membro da string e recebe uma string como argumento. find devolve a posição, com o índice a começar em 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, vais processar linhas de um relatório de log. Cada linha de log é uma string com o seguinte formato: "[<LEVEL>]: <MESSAGE>".

Existem três níveis de log diferentes:

  • INFO
  • WARNING
  • ERROR

Tens três tarefas e cada uma recebe uma linha de log e pede-te que faças algo com ela.

1. Obtém a mensagem de uma linha de log

Implementa o método log_line::message para devolver a mensagem de uma linha de log:

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

2. Obtém o nível de log de uma linha de log

Implementa o método log_line::log_level para devolver o nível de log de uma linha de log, que deve ser devolvido em maiúsculas:

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

3. Reformata uma linha de log

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

log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Editar via GitHub A ligação abre numa nova janela ou separador
C++ Exercism

Estás pronto para começar Níveis de log?

Inscreve-te no Exercism para aprenderes e dominares C++ com 19 conceitos100 exercícios, e mentoria humana real, tudo grátis.