String::pop în Rust

String Rust 1.0

Scoate ultimul caracter din String și îl returnează ca Option<char> (None dacă textul e gol).

Sintaxă
pub fn pop(&mut self) -> Option<char>

Ce face String::pop

pop elimină ultimul caracter, oricâți octeți ar avea (ș are 2 octeți, dar este scos întreg). Returnează Some(caracter) sau None dacă textul era deja gol, deci nu oprește niciodată programul.

Este perechea lui push. Pentru a scoate mai multe caractere de la final folosește truncate; pentru a scoate de la început sau din mijloc, remove sau drain.

Ce returnează

Option<char>: Some(c) cu caracterul scos sau None pentru un text gol.

Exemple

Exemplul 1: Scoaterea ultimei litere

fn main() {
    let mut s = String::from("Arad;");
    let scos = s.pop();
    println!("scos: {:?}, rămâne: {s}", scos);

    let mut d = String::from("Bacău");
    println!("scos: {:?}, rămâne: {d}", d.pop());
    println!("scos: {:?}, rămâne: {d}", d.pop());
}

Rezultat

scos: Some(';'), rămâne: Arad
scos: Some('u'), rămâne: Bacă
scos: Some('ă'), rămâne: Bac

Exemplul 2: Golirea textului cu while let

Bucla se oprește singură când pop returnează None.

fn main() {
    let mut s = String::from("abc");
    while let Some(c) = s.pop() {
        println!("am scos '{c}', a rămas {:?}", s);
    }
    println!("pop pe text gol: {:?}", s.pop());
}

Rezultat

am scos 'c', a rămas "ab"
am scos 'b', a rămas "a"
am scos 'a', a rămas ""
pop pe text gol: None

Greșeli frecvente

  • Folosești s.pop().unwrap() pe un text care poate fi gol: programul se oprește cu panică. Verifică rezultatul cu if let Some(c).

Comenzi înrudite

  • String::push_str: Adaugă la finalul unui String un text (push_str) sau un singur caracter (push).
  • String::truncate: Scurtează textul la primii new_len octeți; nu face nimic dacă textul e deja mai scurt.
  • String::remove: Scoate caracterul de la poziția idx (în octeți) și îl returnează; restul textului se mută la stânga.
  • String::drain: Scoate din String bucata dintr-un interval de octeți și o returnează ca iterator de caractere.