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

  1. 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.
  2. Creació i Inicialització de Cadenes:

    • Com crear cadenes literals.
    • Com crear i modificar cadenes de tipus String.
  3. Operacions Comunes amb Cadenes:

    • Concatenació.
    • Indexació i slicing.
    • Iteració sobre caràcters i subcadenes.
  4. Conversió entre &str i String:

    • 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.

fn main() {
    let cadena_literal: &str = "Hola, món!";
    println!("{}", cadena_literal);
}

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.

fn main() {
    let cadena = String::from("Hola");
    for car in cadena.chars() {
        println!("{}", car);
    }
}

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.

© Copyright 2024. Tots els drets reservats