Cairo ne dispose pas d'un type natif pour les strings, mais propose deux façons de les gérer : les strings courtes entre guillemets simples et ByteArray entre guillemets doubles.
Une string courte est une string ASCII dans laquelle chaque caractère est encodé sur un octet.
Le type que Cairo utilise par défaut pour les strings courtes est felt252, ce qui limite leur longueur maximale à 31 caractères.
// below are different ways to write the same value
let name: felt252 = 'Jane'; // short string format
let name: felt252 = 0x4a616e65; // byte format
let name: felt252 = 1247899237; // decimal format
Techniquement, tout type entier plus petit que felt252 peut être représenté au format string courte.
// all of the below are equal u8 values, they are just written using different formats!
let lowercase_a_in_ascii: u8 = 'a'; // short string format
let lowercase_a_in_ascii: u8 = 0x61; // byte format
let lowercase_a_in_ascii: u8 = 97; // decimal format
Pour les strings de plus de 31 caractères, Cairo fournit ByteArray, dont la longueur est illimitée.
let long_string: ByteArray = "this is a string which has more than 31 characters";
Les ByteArrays peuvent être concaténés à l'aide de l'opérateur + :
"Jane" + " " + "Austen"
// => "Jane Austen"
Certains caractères spéciaux doivent être échappés avec une barre oblique inverse, comme \t pour une tabulation et \n pour un retour à la ligne dans les strings.
"How is the weather today?\nIt's sunny"
// =>
// How is the weather today?
// It's sunny
Tu peux même accéder à des octets individuels dans un ByteArray en utilisant son indice.
Attention cependant : le type de l'octet renvoyé est u8, et non ByteArray !
let hello: ByteArray = "Hello World!";
let exclamation_mark: u8 = hello[11];
// => 33
La bibliothèque standard fournit de nombreuses méthodes et opérateurs utiles pour travailler sur les ByteArrays.
Pour en savoir plus sur les méthodes de ByteArray, consulte la documentation de ByteArrayTrait.
Voici quelques exemples :
let name: felt252 = 'Jane';
let mut greeting: ByteArray = "Welcome ";
// append_word appends a single word of a given number of bytes to the end of the ByteArray
greeting.append_word(name, 4);
// => "Welcome Jane"
// rev returns a ByteArray with the all characters reversed
let rev_greeting = greeting.rev();
// => "enaJ emocleW"
Il y a un magasin d'électroménager appelé « Tech Palace » non loin d'ici. Le propriétaire du magasin a récemment installé un grand écran pour diffuser des messages publicitaires et afficher un message d'accueil particulier lorsque les clients scannent leur carte de fidélité à l'entrée. L'écran est composé de nombreuses petites LED et peut afficher plusieurs lignes de texte.
Le propriétaire du magasin a besoin de ton aide pour le code qui génère le texte destiné au nouvel écran.
Pour la plupart des clients qui scannent leur carte de fidélité, le propriétaire du magasin veut voir s'afficher Welcome to the Tech Palace, suivi du nom du client en majuscules.
Implémente la fonction welcome_message qui prend le nom du client sous la forme d'une courte string (un argument de type felt252) et renvoie le message souhaité sous la forme d'un ByteArray.
welcome_message("Judy")
// => Welcome to the Tech Palace, JUDY
Pour les clients fidèles qui achètent beaucoup dans le magasin, le propriétaire souhaite rendre l'affichage du message de bienvenue plus attrayant en ajoutant une ligne d'étoiles avant et après ce message. Il ne sait pas encore combien d'étoiles doivent figurer sur ces lignes, il veut donc que ce soit configurable.
Écris une fonction add_border qui prend en arguments un message de bienvenue (un ByteArray) et le nombre d'étoiles par ligne (de type u32).
Elle doit renvoyer un ByteArray composé de 3 lignes : une ligne avec le nombre d'étoiles souhaité, puis le message de bienvenue tel qu'il a été transmis, puis une autre ligne d'étoiles.
add_border("Welcome!", 10)
Doit renvoyer ce qui suit :
**********
Welcome!
**********
Avant d'installer ce nouvel écran, le magasin disposait d'un écran similaire qui ne pouvait afficher que des lignes statiques et non configurables. Le propriétaire aimerait réutiliser certains des anciens messages publicitaires sur le nouvel écran. Cependant, les données contiennent déjà une bordure d'étoiles et quelques espaces indésirables. Ta tâche consiste à nettoyer les messages pour qu'ils puissent être réutilisés.
Implémente une fonction clean_up_message qui prend l'ancien message publicitaire sous la forme d'un ByteArray.
La fonction doit d'abord supprimer toutes les étoiles du texte, puis retirer les espaces au début et à la fin du texte restant.
La fonction doit ensuite renvoyer le message nettoyé.
let message: ByteArray = "
**************************
* BUY NOW, SAVE 10% *
**************************
";
clean_up_message(message)
// => BUY NOW, SAVE 10%
Inscris-toi sur Exercism pour apprendre et maîtriser Cairo avec 25 concepts68 exercices, et un vrai mentorat humain, le tout gratuitement.