Percursos
/
C#
C#
/
Exercícios
/
Namorados do liceu
Namorados do liceu

Namorados do liceu

Exercício de aprendizagem

Introdução

Formatação de strings

Existem dois mecanismos principais para formatar strings em C#/.NET: a utilização de String.Format() e a interpolação de strings.

Formatação composta

String.Format() recebe uma string (designada na documentação como formato composto), composta por texto fixo e marcadores de posição (conhecidos na documentação como itens de formato), e um número variável de argumentos. O valor devolvido resolve cada item de formato com o argumento correspondente e combina os valores resolvidos com o texto fixo.

string.Format("I had {0} bitcoins on {1}, the day I forgot my password.", 55.5, new DateTime(2010, 2, 25));
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

Este mecanismo é tecnicamente conhecido como formatação composta.

Interpolação de strings

As strings interpoladas são precedidas de um $ e incluem expressões de tempo de execução entre chavetas. O item de formato tem a seguinte sintaxe: $"{<interpolationExpression>}". Eliminam a necessidade de uma lista de argumentos separada. O resultado é funcionalmente equivalente ao mecanismo String.Format().

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf} bitcoins on {thatDay}, the day I forgot my password."
// => "I had 55.5 bitcoins on 2/25/2010 00:00:00, the day I forgot my password." - US settings

Itens de formato

O texto entre chavetas, marcadores de posição no caso do formato composto e expressões interpoladas no caso da interpolação de strings, é conhecido como item de formato.

Um item de formato pode ser composto por até 3 partes. A primeira é a expressão obrigatória ou o marcador de posição de argumento, como se vê no código de exemplo acima. Além disso, há um alinhamento opcional (introduzido por uma vírgula, ",") e uma format string opcional (introduzida por dois pontos, ":").

{<interpolationExpression>[,<alignment>][:<formatString>]}

O alinhamento especifica o comprimento do "campo" onde o texto é colocado, preenchido à esquerda com espaços se o alinhamento for positivo ou à direita se for negativo.

A format string especifica a forma do texto de saída, por exemplo se devem ser incluídos separadores de milhares num número ou se deve ser apresentada apenas a parte da data de um objeto DateTime.

O código seguinte ilustra a apresentação da parte da data de um objeto DateTime e de um número de vírgula flutuante em forma exponencial.

var loadsOf = 55.5;
var thatDay = new DateTime(2010, 2, 25);
$"I had {loadsOf:E} bitcoins on {thatDay:d}, the day I forgot my password."
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

string.Format(
    "I had {0:E} bitcoins on {1:d}, the day I forgot my password.",
    loadsOf, thatDay)
// => I had 5.550000E+001 bitcoins on 02/25/2010, the day I forgot my password. - US settings

Existe formatação padrão e personalizada tanto para números como para datas. Não há uma diferença essencial entre a formatação personalizada e a padrão, a não ser que tens a possibilidade de compor format strings personalizadas a partir de letras de formato.

Cultura

Cada thread tem uma cultura predefinida, Thread.CurrentThread.CurrentCulture, encapsulada numa instância de CultureInfo. A cultura do thread determina como as datas e os números são formatados em relação a variações regionais, como a diferença entre o formato de data convencional do Reino Unido, DD/MM/YYYY, e o dos Estados Unidos, MM/DD/YYYY.

CultureInfo implementa a interface IFormatProvider, que pode ser passada a certas sobrecargas de String.Format(). Isto pode ser usado para substituir a cultura do thread.

Strings verbatim

As strings verbatim permitem strings com várias linhas. São introduzidas com um @.

string str = @"
See no wretched
quotes everywhere
";

Instruções

Neste exercício, vais ajudar namorados do secundário a declarar o seu amor nas redes sociais.

1. Mostra o nome do casal separado por um coração

Implementa o método estático HighSchoolSweethearts.DisplaySingleLine() para receber dois nomes e mostrá-los separados por um coração. O texto formatado deve ter 61 carateres de largura, com o coração no centro da string.

Está garantido que todos os nomes cabem bem dentro da largura da linha.

HighSchoolSweethearts.DisplaySingleLine("Lance Green", "Pat Riley");
// => "                  Lance Green ♡ Pat Riley                    "

2. Mostra as iniciais do casal num coração em arte ASCII

Implementa o método estático HighSchoolSweethearts.DisplayBanner(), que mostra os dois conjuntos de iniciais separados por um sinal de mais.

HighSchoolSweethearts.DisplayBanner("L. G.", "P. R.");
// see the ascii art below
     ******       ******
   **      **   **      **
 **         ** **         **
**            *            **
**                         **
**     L. G.  +  P. R.     **
 **                       **
   **                   **
     **               **
       **           **
         **       **
           **   **
             ***
              *

3. Faz os estudantes de intercâmbio alemães sentirem-se em casa com declarações sensíveis à localidade.

Implementa o método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar a data de início da relação e a duração para os nossos estudantes de intercâmbio alemães.

HighSchoolSweethearts.DisplayGermanExchangeStudents("Norbert", "Heidi", new DateTime(2019, 1, 22), 1535.22f);
// => "Norbert and Heidi have been dating since 22.01.2019 - that's 1.535,22 hours"
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Namorados do liceu?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.