יצירת מקטעי 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>() כדי להמיר אותם לסוג המתאים.
אתגר
קלתקבלו שתי קלטים. הקלט הראשון הוא משפט שלם, והקלט השני הוא שני מספרים המופרדים ברווח, המייצגים את אינדקס ההתחלה ואת אינדקס הסיום ליצירת פרוסה. צרו 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: כתבו את הקוד שלכם למטה
// נתחו את האינדקסים וצרו את פרוסת המחרוזת
// הדפיסו את המחרוזת המקורית ואת הפרוסה
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מילים6טיפול בהיעדר באמצעות 'Option'
מהו 'Option'?שימוש ב-'match' עם 'Option'is_some() ו-is_none()חילוץ ערך מתוך 'Option'המתודה expectהגדרת ברירת מחדל: unwrap_orסיכום – מציאת איבר9מקטעי מחרוזת ועוד
String לעומת &strיצירת מקטעי Stringמקטעים כפרמטרים לפונקציותמקטעים אחריםסיכום – מציאת המילה הראשונהתרגלו בעצמכם: קומפיילר Rust אונליין