Menu
Coddy logo textTech

יצירת מקטעי String

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 55 מתוך 66.

עכשיו, כשאתם מבינים את ההבדל בין String ל־&str, נלמד איך ליצור פרוסות מחרוזת ממחרוזות קיימות. יש שתי דרכים עיקריות ליצור &str מתוך String.

הדרך הפשוטה ביותר היא להשתמש באופרטור ההפניה & עם ה־String שלך. כך נוצר מקטע שמפנה למחרוזת כולה:

let my_string = String::from("Hello World");
let slice: &str = &my_string; // זה יוצר פרוסה של המחרוזת כולה

אפשר גם ליצור פרוסות של חלקים מסוימים ממחרוזת באמצעות תחביר טווח. הפורמט הוא &string[start..end], כאשר start הוא האינדקס ההתחלתי ו-end הוא אחד אחרי התו האחרון שרוצים לכלול:

let my_string = String::from("Hello World");
let first_word = &my_string[0..5]; // זה נותן לנו "Hello"
let second_word = &my_string[6..11]; // זה נותן לנו "World"

האינדקסים המשמשים בתחביר של טווחים הם מסוג usize, שהוא סוג המספרים השלמים הבלתי־חתומים של Rust, המייצג גדלים ואינדקסים. זהו הסוג המקובל בכל פעם שצריך לגשת לאיבר באוסף לפי אינדקס או לציין אורך. בעת ניתוח ערכי אינדקס מקלט, תשתמשו ב־.parse::<usize>() כדי להמיר אותם לסוג המתאים.

challenge icon

אתגר

קל

תקבלו שתי קלטים. הקלט הראשון הוא משפט שלם, והקלט השני הוא שני מספרים המופרדים ברווח, המייצגים את אינדקס ההתחלה ואת אינדקס הסיום ליצירת פרוסה. צרו String מהקלט הראשון, ואז צרו פרוסת מחרוזת באמצעות הטווח שמציינים שני האינדקסים. הדפיסו את המחרוזת המקורית בשורה הראשונה ואת הפרוסה שחולצה בשורה השנייה.

דרישות:

  • קראו את הקלט הראשון (המשפט השלם) והסירו רווחים לבנים
  • צרו String מהקלט הזה
  • קראו את הקלט השני (שני מספרים המופרדים ברווח) והסירו רווחים לבנים
  • פצלו את הקלט השני לפי רווח כדי לקבל את אינדקס ההתחלה ואת אינדקס הסיום
  • נתחו את שני האינדקסים ל-usize
  • צרו פרוסת מחרוזת באמצעות תחביר הטווח &string[start..end]
  • הדפיסו את המחרוזת המקורית
  • הדפיסו את הפרוסה שחולצה

קלט:

  • שורה ראשונה: משפט (לדוגמה, Hello World)
  • שורה שנייה: שני מספרים המופרדים ברווח (לדוגמה, 0 5)

פלט:

  • שורה ראשונה: המחרוזת המקורית
  • שורה שנייה: הפרוסה שחולצה

נסו בעצמכם

use std::io;

fn main() {
    // קראו את הקלט הראשון (המשפט המלא)
    let mut sentence = String::new();
    io::stdin().read_line(&mut sentence).expect("Failed to read line");
    let sentence = sentence.trim();
    
    // קראו את הקלט השני (שני מספרים המופרדים ברווח)
    let mut indices = String::new();
    io::stdin().read_line(&mut indices).expect("Failed to read line");
    let indices = indices.trim();
    
    // TODO: כתבו את הקוד שלכם למטה
    // נתחו את האינדקסים וצרו את פרוסת המחרוזת
    
    
    // הדפיסו את המחרוזת המקורית ואת הפרוסה
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Rust אונליין