Cairo no tiene un tipo nativo para los string, pero ofrece dos formas de gestionarlos: los string cortos, que se escriben entre comillas simples, y ByteArray, que se escribe entre comillas dobles.
Un string corto es un string ASCII en el que cada carácter se codifica en un byte.
El tipo que Cairo usa por defecto para los string cortos es felt252, lo que hace que su longitud máxima sea de solo 31 caracteres.
// 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
Técnicamente, cualquier tipo de entero más pequeño que felt252 se puede representar con el formato de string corto.
// 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
Para los string que tengan más de 31 caracteres, Cairo ofrece ByteArray, que tiene una longitud ilimitada.
let long_string: ByteArray = "this is a string which has more than 31 characters";
Los ByteArray se pueden concatenar con el operador +:
"Jane" + " " + "Austen"
// => "Jane Austen"
Algunos caracteres especiales hay que escaparlos con una barra invertida delante, como \t para un tabulador y \n para un salto de línea en los string.
"How is the weather today?\nIt's sunny"
// =>
// How is the weather today?
// It's sunny
También puedes acceder a bytes concretos dentro de un ByteArray usando su índice.
¡Aun así, ten cuidado: el tipo del byte devuelto es u8, no ByteArray!
let hello: ByteArray = "Hello World!";
let exclamation_mark: u8 = hello[11];
// => 33
La biblioteca principal proporciona muchos métodos y operadores útiles para trabajar con ByteArray.
Para obtener más información sobre los métodos de ByteArray, consulta la documentación de ByteArrayTrait.
Aquí tienes algunos ejemplos:
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"
Cerca hay una tienda de electrodomésticos llamada «Tech Palace». El dueño de la tienda ha instalado hace poco una gran pantalla para usarla en mensajes de marketing y para mostrar un saludo especial cuando los clientes escanean sus tarjetas de fidelidad en la entrada. La pantalla se compone de muchas luces LED pequeñas y puede mostrar varias líneas de texto.
El dueño de la tienda necesita tu ayuda con el código que se usa para generar el texto de la nueva pantalla.
Para la mayoría de los clientes que escanean sus tarjetas de fidelidad, el dueño de la tienda quiere ver Welcome to the Tech Palace, seguido del nombre del cliente en mayúsculas en la pantalla.
Implementa la función welcome_message que acepta el nombre del cliente como argumento de tipo string corto (felt252) y devuelve el mensaje deseado como un ByteArray.
welcome_message("Judy")
// => Welcome to the Tech Palace, JUDY
Para los clientes fieles que compran mucho en la tienda, el dueño quiere que la pantalla de bienvenida sea más vistosa añadiendo una línea de estrellas antes y después del mensaje de bienvenida. Todavía no saben con certeza cuántas estrellas debería haber en las líneas, así que quieren que eso sea configurable.
Escribe una función add_border que acepte un mensaje de bienvenida (un ByteArray) y el número de estrellas por línea (de tipo u32) como argumentos.
Debe devolver un ByteArray que conste de 3 líneas: una línea con el número de estrellas deseado, después el mensaje de bienvenida tal como se pasó y, por último, otra línea de estrellas.
add_border("Welcome!", 10)
Debería devolver lo siguiente:
**********
Welcome!
**********
Antes de instalar esta nueva pantalla, la tienda tenía una pantalla similar que solo podía mostrar líneas estáticas y no configurables. Al dueño le gustaría reutilizar algunos de los antiguos mensajes de marketing en la nueva pantalla. Sin embargo, los datos ya incluyen un borde de estrellas y algunos espacios en blanco no deseados. Tu tarea es limpiar los mensajes para que se puedan reutilizar.
Implementa una función clean_up_message que acepte el antiguo mensaje de marketing como un ByteArray.
La función debe eliminar primero todas las estrellas del texto y, después, eliminar los espacios en blanco al principio y al final del texto restante.
A continuación, la función debe devolver el mensaje ya limpio.
let message: ByteArray = "
**************************
* BUY NOW, SAVE 10% *
**************************
";
clean_up_message(message)
// => BUY NOW, SAVE 10%
Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.