Parcours
/
C#
C#
/
Exercices
/
Amoureux du lycée
Amoureux du lycée

Amoureux du lycée

Exercice d'apprentissage

Introduction

Formatage de strings

Il existe deux mécanismes principaux pour formater des strings en C#/.NET : l'utilisation de String.Format() et l'interpolation de strings.

Formatage composite

String.Format() prend une string (appelée format composite dans la documentation) composée de texte fixe et d'espaces réservés (appelés éléments de format dans la documentation), ainsi qu'un nombre variable d'arguments. La valeur de retour résout chaque élément de format à l'aide de l'argument correspondant, puis combine les valeurs résolues avec le texte fixe.

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

Ce mécanisme est techniquement appelé formatage composite.

Interpolation de strings

Les chaînes interpolées sont précédées d'un $ et contiennent des expressions évaluées à l'exécution, placées entre accolades. L'élément de format a la syntaxe suivante : $"{<interpolationExpression>}". Elles suppriment le besoin d'une liste d'arguments séparée. Le résultat est fonctionnellement équivalent au mécanisme 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

Éléments de format

Le texte entre accolades, c'est-à-dire les espaces réservés dans le cas du format composite et les expressions interpolées dans le cas de l'interpolation de strings, est appelé élément de format.

Un élément de format peut comporter jusqu'à 3 parties. La première est l'expression ou l'espace réservé d'argument obligatoire, comme dans l'exemple de code ci-dessus. Il y a en outre un alignement facultatif (introduit par une virgule, « , ») et une chaîne de format facultative (introduite par deux-points, « : »).

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

L'alignement spécifie la longueur du « champ » dans lequel le texte est placé, complété par des espaces à gauche si l'alignement est positif, ou à droite s'il est négatif.

La chaîne de format spécifie la forme du texte produit : faut-il par exemple inclure des séparateurs de milliers pour un nombre, ou bien produire uniquement la partie date d'un objet DateTime ?

Le code suivant illustre l'affichage de la partie date d'un objet DateTime et d'un nombre à virgule flottante sous forme exponentielle.

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

Il existe un formatage standard et un formatage personnalisé, aussi bien pour les nombres que pour les dates. Il n'y a pas de différence essentielle entre les formats personnalisés et standard, si ce n'est qu'on peut composer des chaînes de format personnalisées à partir de lettres de format.

Culture

Chaque thread possède une culture par défaut, Thread.CurrentThread.CurrentCulture, encapsulée dans une instance de CultureInfo. La culture du thread détermine la façon dont les dates et les nombres sont formatés en fonction des variations régionales, comme la différence de format de date habituel entre le DD/MM/YYYY britannique et le MM/DD/YYYY américain.

CultureInfo implémente l'interface IFormatProvider, que l'on peut passer à certaines surcharges de String.Format(). Cela permet de remplacer la culture du thread.

Chaînes verbatim

Les chaînes verbatim permettent d'écrire des strings sur plusieurs lignes. Elles sont introduites par un @.

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

Instructions

Dans cet exercice, on va aider des amoureux de lycée à déclarer leur amour sur les réseaux sociaux.

1. Affiche le nom du couple séparé par un cœur

Implémente la méthode statique HighSchoolSweethearts.DisplaySingleLine() qui prend deux noms et les affiche séparés par un cœur. Le texte formaté doit faire 61 caractères de large, avec le cœur au centre de la string.

Tous les noms tiennent largement dans la largeur de la ligne.

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

2. Affiche les initiales du couple dans un cœur en art ASCII

Implémente la méthode statique HighSchoolSweethearts.DisplayBanner() qui affiche les deux jeux d'initiales séparés par un signe plus.

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

3. Fais en sorte que les correspondants allemands se sentent chez eux avec des déclarations sensibles à la locale.

Implémente la méthode statique HighSchoolSweethearts.DisplayGermanExchangeStudents() pour afficher la date de début de la relation et sa durée pour nos correspondants allemands.

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"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer Amoureux du lycée ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.