CodeBlanks Logo Icon CodeBlanks

String dilimleme

Dilimlerle alt string almanın doğru yolunu öğrenirsin.

String dilimleme

Metni bayt aralığıyla dilimlemek, aralık bir karakterin ortasına düşerse panic verir. Rust bu yüzden s[0] gibi tek indeksle erişime hiç izin vermez:

let s = "Çiçekçi";
// let c = s[0];        // hata: str indekslenemez
// let x = &s[0..1];    // panic: Ç iki bayt
println!("{}", s.is_char_boundary(2));   // true
println!("{}", &s[0..2]);                // Ç

char_indices

Kopya yapmadan karakter sınırında dilim almak istiyorsan char_indices her karakterin bayt konumunu verir:

let s = "Çiçekçi";
for (i, c) in s.char_indices().take(4) {
    print!("{i}:{c} ");     // 0:Ç 2:i 3:ç 5:e
}
let (son, _) = s.char_indices().nth(3).unwrap();
println!("{}", &s[..son]);   // Çiç

4. karakterin başladığı bayt (5), ilk üç karakterin bittiği yerdir.

Uygulama Güvenli ilk üç

let s = "Çiçekçi"; için char_indices().nth(3) ile 4. karakterin bayt konumunu bul. &s[..konum] dilimini ve konumu boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn main() {
    let s = "Çiçekçi";
    let (konum, _) = s.char_indices().nth(3).unwrap();
    println!("{} {}", &s[..konum], konum);
}

Beklenen çıktı

Çiç 5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir metnin ilk 3 karakterini güvenle almanın en basit yolu hangisi?

  • s[3]
  • s.bytes().take(3)
  • s.chars().take(3).collect::<String>() Doğru cevap
  • &s[0..3]

Açıklama: chars karakter sınırlarına göre ilerler; &s[0..3] Türkçe harflerde panic verebilir.

2 Bayt konumları

Soru
for (i, c) in s.____() {
    println!("{i}: {c}");
}
Cevap
for (i, c) in s.char_indices() {
    println!("{i}: {c}");
}

Açıklama: char_indices (bayt konumu, karakter) ikilileri verir.

3 "Çiçekçi" üzerinde ifade ve sonucu

Kavram Anlamı
&s[0..2] "Ç"
&s[0..1] Panic
s.is_char_boundary(1) false
s.char_indices().nth(3) Some((5, 'e'))

Başlangıç bölümündeki tüm dersler

16 Proje: Yapılacaklar listesi

  1. Görev modeli
  2. Ekleme
  3. Listeleme
  4. İşaretleme
  5. Komut okuma