Track
/
C++
C++
/
Esercizi
/
Livelli di log
Livelli di log

Livelli di log

Esercizio di apprendimento

Introduzione

Le inclusioni

In generale, in programmazione non vuoi reinventare la ruota. Per molti algoritmi standard, probabilmente c'è già qualcuno che ha fatto il lavoro per te.

La direttiva include

Per includere il contenuto di altri file, C++ usa la direttiva include. Queste inclusioni vanno dichiarate in cima al file. Durante la compilazione, la riga con la direttiva viene sostituita dal contenuto del rispettivo file. Dopo le inclusioni, i namespace restano quelli del file originale.

La libreria standard

La libreria standard offre molte funzioni, algoritmi e strutture dati comuni. La libreria standard usa il namespace std.

Un esempio è la libreria numerica del C, cmath: fornisce molte operazioni matematiche comuni.

#include <cmath>

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

Le librerie standard si includono con le parentesi angolari (<>) al posto delle virgolette doppie ("). La differenza sta in dove il compilatore cerca i rispettivi file. Con le parentesi angolari, la ricerca nel progetto corrente viene saltata e si parte direttamente dalle directory di inclusione del sistema. Se vuoi includere file locali, usa le virgolette doppie: #include "myfile"

Stringhe

In C++ una string è un oggetto mutabile che rappresenta il testo come una sequenza di caratteri (lettere, cifre, punteggiatura, ecc.). Le stringhe si manipolano chiamando i metodi della stringa.

La libreria delle stringhe

In C++, il tipo stringa e le funzioni associate devono essere inclusi dalla libreria delle stringhe prima di poterli usare. Puoi farlo aggiungendo #include <string> in cima al file. A quel punto popoleranno il namespace std. Il nome completo del tipo stringa è std::string. Il letterale stringa usa il carattere delle virgolette doppie: ".

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

Operazioni comuni sulle stringhe

Puoi usare l'operatore + per concatenare le stringhe:

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

Per usare la libreria delle stringhe, devi sapere che è possibile chiamare una funzione che appartiene a un oggetto. Queste si chiamano funzioni membro. Più avanti nel programma del corso imparerai di più sulle funzioni membro e sul concetto di classe a esse collegato.

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"

Anche la funzione find è molto utile. Si chiama come funzione membro sulla stringa e prende una stringa come argomento. find restituisce la posizione, con indice che parte da zero, della prima occorrenza nella stringa.

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

Istruzioni

In questo esercizio, elaborerai le righe di un report di log. Ogni riga di log è una stringa formattata così: "[<LEVEL>]: <MESSAGE>".

Ci sono tre livelli di log diversi:

  • INFO
  • WARNING
  • ERROR

Hai tre compiti, ognuno dei quali riceverà una riga di log e ti chiederà di fare qualcosa con essa.

1. Ottieni il messaggio da una riga di log

Implementa il metodo log_line::message per restituire il messaggio di una riga di log:

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

2. Ottieni il livello di log da una riga di log

Implementa il metodo log_line::log_level per restituire il livello di log di una riga di log, che va restituito in maiuscolo:

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

3. Riformatta una riga di log

Implementa il metodo log_line::reformat che riformatta la riga di log, mettendo prima il messaggio e poi il livello di log tra parentesi:

log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C++ Exercism

Vuoi iniziare Livelli di log?

Iscriviti a Exercism per imparare e padroneggiare C++ con 19 concetti100 esercizi e il mentoring di persone reali, tutto gratis.