Rutas
/
C#
C#
/
Ejercicios
/
Novios del instituto
Novios del instituto

Novios del instituto

Ejercicio de aprendizaje

Introducción

Formato de strings

En C#/.NET hay dos mecanismos principales para dar formato a los strings: el uso de String.Format() y la interpolación de strings.

Formato compuesto

String.Format() recibe un string (al que la documentación llama formato compuesto) formado por texto fijo y marcadores de posición (que la documentación llama elementos de formato), y un número variable de argumentos. El valor devuelto resuelve cada elemento de formato usando el argumento correspondiente y combina los valores resueltos con el texto fijo.

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

Técnicamente, este mecanismo se conoce como formato compuesto.

Interpolación de strings

Los strings interpolados van precedidos de un $ e incluyen expresiones que se evalúan en tiempo de ejecución entre llaves. El elemento de formato tiene la siguiente sintaxis: $"{<interpolationExpression>}". Eliminan la necesidad de una lista de argumentos aparte. El resultado es funcionalmente equivalente al mecanismo de 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

Elementos de formato

El texto entre llaves, que en el formato compuesto son marcadores de posición y, en la interpolación de strings, expresiones interpoladas, se conoce como elemento de formato.

Un elemento de formato puede constar de hasta 3 partes. La primera es la expresión o el marcador de posición del argumento, obligatoria, como se ve en el código de ejemplo anterior. Además, hay una alineación opcional (que se introduce con una coma, «,») y un string de formato opcional (que se introduce con dos puntos, «:»).

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

La alineación especifica la longitud del «campo» en el que se coloca el texto, rellenado con espacios a la izquierda si la alineación es positiva o a la derecha si es negativa.

El string de formato especifica la forma del texto de salida, como si deben incluirse separadores de miles en un número o si solo debe mostrarse la parte de la fecha de un objeto DateTime.

El siguiente código ilustra cómo mostrar la parte de la fecha de un objeto DateTime y un número de coma flotante en notación 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

Existen formatos tanto estándar como personalizados, para números y para fechas. No hay una diferencia esencial entre los formatos personalizados y los estándar, salvo que tienes la oportunidad de componer strings de formato personalizados a partir de letras de formato.

Cultura

Cada hilo tiene una cultura predeterminada, Thread.CurrentThread.CurrentCulture, encapsulada en una instancia de CultureInfo. La cultura del hilo determina cómo se formatean las fechas y los números en función de variaciones regionales, como la diferencia en el formato de fecha convencional entre el DD/MM/YYYY del Reino Unido y el MM/DD/YYYY de Estados Unidos.

CultureInfo implementa la interfaz IFormatProvider, que puede pasarse a determinadas sobrecargas de String.Format(). Esto puede usarse para anular la cultura del hilo.

Strings textuales

Los strings textuales permiten strings de varias líneas. Se introducen con una @.

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

Instrucciones

En este ejercicio vas a ayudar a una pareja de enamorados del instituto a declarar su amor en las redes sociales.

1. Muestra el nombre de la pareja separado por un corazón

Implementa el método estático HighSchoolSweethearts.DisplaySingleLine() para recibir dos nombres y mostrarlos separados por un corazón. El texto formateado debe tener 61 caracteres de ancho, con el corazón en el centro del string.

Todos los nombres caben de sobra dentro del ancho de la línea.

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

2. Muestra las iniciales de la pareja en un corazón de arte ascii

Implementa el método estático HighSchoolSweethearts.DisplayBanner(), que muestra los dos conjuntos de iniciales separados por un signo más.

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

3. Haz que los estudiantes de intercambio alemanes se sientan como en casa con declaraciones adaptadas a la configuración regional.

Implementa el método estático HighSchoolSweethearts.DisplayGermanExchangeStudents() para mostrar la fecha de inicio de la relación y la duración de esta para nuestros estudiantes de intercambio alemanes.

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 en GitHub El enlace se abre en una ventana o pestaña nueva
C# Exercism

¿Listo para empezar Novios del instituto?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.