En aquest tema, explorarem com treballar amb cadenes de text (strings) en Rust. Les cadenes són una part fonamental de molts programes, ja que permeten manipular text de diverses maneres. Rust ofereix diverses maneres de treballar amb cadenes, cadascuna amb les seves pròpies característiques i usos.
Conceptes Clau
-
Tipus de Cadenes en Rust:
&str
: Una referència a una cadena de text immutable.String
: Una cadena de text mutable que pot créixer.
-
Creació i Inicialització de Cadenes:
- Com crear cadenes literals.
- Com crear i modificar cadenes de tipus
String
.
-
Operacions Comunes amb Cadenes:
- Concatenació.
- Indexació i slicing.
- Iteració sobre caràcters i subcadenes.
-
Conversió entre
&str
iString
:- Com convertir entre aquests dos tipus de cadenes.
Creació i Inicialització de Cadenes
&str
(Cadena de Text Immutables)
Les cadenes literals en Rust són de tipus &str
. Aquestes cadenes són immutables i es defineixen entre cometes dobles.
String
(Cadena de Text Mutable)
El tipus String
és una cadena mutable que pot créixer. Es pot crear una cadena de tipus String
a partir d'una cadena literal utilitzant el mètode to_string
o String::from
.
fn main() { let mut cadena: String = String::from("Hola"); cadena.push_str(", món!"); println!("{}", cadena); }
Operacions Comunes amb Cadenes
Concatenació
Rust ofereix diverses maneres de concatenar cadenes. Una manera comuna és utilitzar el mètode push_str
per afegir una cadena a una altra.
fn main() { let mut cadena = String::from("Hola"); cadena.push_str(", món!"); println!("{}", cadena); }
També es pot utilitzar l'operador +
per concatenar cadenes.
fn main() { let cadena1 = String::from("Hola"); let cadena2 = String::from(", món!"); let resultat = cadena1 + &cadena2; // cadena1 es mou aquí i ja no es pot utilitzar println!("{}", resultat); }
Indexació i Slicing
En Rust, no es pot indexar directament una cadena per obtenir un caràcter, ja que les cadenes estan codificades en UTF-8. En lloc d'això, es poden utilitzar slices.
fn main() { let cadena = String::from("Hola, món!"); let slice = &cadena[0..4]; // Obté els primers 4 bytes println!("{}", slice); }
Iteració sobre Caràcters i Subcadenes
Es pot iterar sobre els caràcters d'una cadena utilitzant el mètode chars
.
Conversió entre &str
i String
De &str
a String
Es pot convertir una cadena de tipus &str
a String
utilitzant el mètode to_string
o String::from
.
fn main() { let cadena_literal = "Hola, món!"; let cadena_string = cadena_literal.to_string(); println!("{}", cadena_string); }
De String
a &str
Es pot obtenir una referència a una cadena de tipus String
utilitzant el mètode as_str
.
fn main() { let cadena_string = String::from("Hola, món!"); let cadena_str = cadena_string.as_str(); println!("{}", cadena_str); }
Exercicis Pràctics
Exercici 1: Concatenació de Cadenes
Escriu una funció que prengui dues cadenes de text i les concateni.
fn concatena_cadenes(cadena1: &str, cadena2: &str) -> String { let mut resultat = String::from(cadena1); resultat.push_str(cadena2); resultat } fn main() { let cadena1 = "Hola"; let cadena2 = ", món!"; let resultat = concatena_cadenes(cadena1, cadena2); println!("{}", resultat); // Ha de mostrar "Hola, món!" }
Exercici 2: Comptar Caràcters
Escriu una funció que compti el nombre de caràcters en una cadena de text.
fn compta_caracters(cadena: &str) -> usize { cadena.chars().count() } fn main() { let cadena = "Hola, món!"; let num_caracters = compta_caracters(cadena); println!("La cadena té {} caràcters.", num_caracters); // Ha de mostrar "La cadena té 10 caràcters." }
Resum
En aquest tema, hem après sobre els dos tipus principals de cadenes en Rust: &str
i String
. Hem vist com crear, inicialitzar i modificar cadenes, així com les operacions comunes que es poden realitzar amb elles. També hem explorat com convertir entre &str
i String
. Finalment, hem practicat aquests conceptes amb alguns exercicis pràctics. Amb aquests coneixements, estàs preparat per treballar amb cadenes de text en Rust de manera eficient i efectiva.