62 lines
2.4 KiB
Rust
62 lines
2.4 KiB
Rust
// 🦀 Rust 03: Slices & Lifetimes Grundlagen
|
|
// ==========================================
|
|
|
|
// 🎯 TEILZIEL 1 (TODO 1): Gib einen String-Slice auf das erste Wort zurück
|
|
// Suche das erste Leerzeichen ' ' im String.
|
|
// Wenn ein Leerzeichen gefunden wird, gib den Slice von Index 0 bis zum Leerzeichen zurück.
|
|
// Wenn kein Leerzeichen existiert, gib den gesamten String als Slice zurück.
|
|
pub fn first_word(s: &str) -> &str {
|
|
// TODO: Ermittle das erste Wort und gib den Slice zurück
|
|
""
|
|
}
|
|
|
|
// 🎯 TEILZIEL 2 (TODO 2): Berechne die Summe aller Elemente in einem Array-Slice &[i32]
|
|
// Iteriere über den Slice oder nutze eine Schleife.
|
|
pub fn sum_slice(numbers: &[i32]) -> i32 {
|
|
// TODO: Berechne und gib die Summe zurück
|
|
0
|
|
}
|
|
|
|
// 🎯 TEILZIEL 3 (TODO 3): Erstelle einen sicheren Sub-Slice
|
|
// Parameter: arr (&[u32]), start (usize), len (usize)
|
|
// Falls `start + len > arr.len()` oder `start > arr.len()`, gib einen leeren Slice `&[]` zurück.
|
|
// Andernfalls gib `&arr[start..start + len]` zurück.
|
|
pub fn get_subslice(arr: &[u32], start: usize, len: usize) -> &[u32] {
|
|
// TODO: Validiere Grenzen und gib den Sub-Slice zurück
|
|
&[]
|
|
}
|
|
|
|
// 🎯 TEILZIEL 4 (TODO 4): Finde den längeren zweier String-Slices mit Lifetime-Annotation 'a
|
|
// Falls beide gleich lang sind, gib `x` zurück.
|
|
pub fn longest_str<'a>(x: &'a str, y: &'a str) -> &'a str {
|
|
// TODO: Vergleiche Längen und gib den entsprechenden Slice mit Lifetime 'a zurück
|
|
x
|
|
}
|
|
|
|
// 🎯 TEILZIEL 5 (TODO 5): Entferne ein Präfix und gib den Rest-Slice mit Lifetime 'a zurück
|
|
// Wenn `haystack` mit `prefix` beginnt, gib `Some(&haystack[prefix.len()..])` zurück.
|
|
// Andernfalls gib `None` zurück.
|
|
pub fn strip_prefix_slice<'a>(haystack: &'a str, prefix: &str) -> Option<&'a str> {
|
|
// TODO: Prüfe mit starts_with und gib den Rest-Slice als Option zurück
|
|
None
|
|
}
|
|
|
|
fn main() {
|
|
let sentence = String::from("Rust ZeroCost Abstractions");
|
|
println!("Erstes Wort: '{}'", first_word(&sentence));
|
|
|
|
let numbers = [10, 20, 30, 40, 50];
|
|
println!("Summe: {}", sum_slice(&numbers[1..4]));
|
|
|
|
let slice = get_subslice(&numbers, 2, 2);
|
|
println!("Sub-Slice: {:?}", slice);
|
|
|
|
let str1 = "Concurrency";
|
|
let str2 = "Async";
|
|
println!("Längerer String: {}", longest_str(str1, str2));
|
|
|
|
let path = "/api/v1/users";
|
|
if let Some(rest) = strip_prefix_slice(path, "/api/v1") {
|
|
println!("API Route: {}", rest);
|
|
}
|
|
}
|