Trilhas
/
C#
C#
/
Exercícios
/
Namorados do colégio
Namorados do colégio

Namorados do colégio

Exercício de aprendizagem

Introdução

Formatação de strings

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

Formatação composta

String.Format() recebe uma string (chamada na documentação de formato composto) composta por texto fixo e espaços reservados (conhecidos na documentação como itens de formato), além de um número variável de argumentos. O valor de retorno resolve cada item de formato usando 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

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

Interpolação de strings

Strings interpoladas são prefixadas com um $ e incluem expressões de tempo de execução entre chaves. O item de formato tem a seguinte sintaxe: $"{<interpolationExpression>}". Elas dispensam a necessidade de uma lista separada de argumentos. 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 chaves, espaços reservados 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 espaço reservado de argumento, como visto no código de exemplo acima. Além disso, há um alinhamento opcional (introduzido por uma vírgula, ",") e uma string de formato opcional (introduzida por dois-pontos, ":").

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

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

A string de formato especifica a forma da saída de texto, como se separadores de milhar devem ser incluídos em um número ou se apenas a parte de data de um objeto DateTime deve ser gerada.

O código a seguir ilustra a exibição da parte de data de um objeto DateTime e de um número de ponto 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

Há formatação padrão e personalizada tanto para números quanto para datas. Não há diferença vital entre personalizada e padrão, exceto que você tem a chance de compor strings de formato personalizadas a partir de letras de formato.

Cultura

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

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

Strings verbatim

Strings verbatim permitem strings com várias linhas. Elas são introduzidas com um @.

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

Instruções

Neste exercício, você vai ajudar um casal de namorados do colégio a declarar seu amor nas redes sociais.

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

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

É garantido que todos os nomes vão caber tranquilamente na largura da linha.

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

2. Exiba as iniciais do casal em um coração em arte ascii

Implemente o método estático HighSchoolSweethearts.DisplayBanner(), que exibe 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. Estudantes de intercâmbio alemães devem se sentir em casa com declarações sensíveis à localidade.

Implemente o método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar a data de início do relacionamento e o tempo de duração para 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 O link abre em uma nova janela ou aba
C# Exercism

Tudo pronto para começar Namorados do colégio?

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