先上代碼:
fn main() {
let mut a = String::from("hello! my dear");
let b = foo_function(&a);
println!("{}", b);
a.clear();
println!("a:\"{}\"", a);
}
fn foo_function(s: &String) ->usize {
let bytes = s.as_bytes(); // 將傳進來的a變量分解成byte類型以便遍歷
for (i, &item) in bytes.iter().enumerate() { // 把bytes分解成一組一組的tuple
if item == b' ' {
return i;
}
}
return s.len();
}控制台輸出返回:
6 a:"" Process finished with exit code 0
代碼當中用&String類型的參數,接收可變變量mut a的地址,這樣避免下方a.clear()方法不能執行。
用for循環將byte類型的新變量用iter()疊代器逐步列舉enumberate()
如果檢查出列舉的tuple(元組)類型裡的&item含有空格b' ', 則返回這個tuple元祖的i值,實際上就是字符串坐標值。如果遍歷沒有逮到byte空格,則返回整個&String參數的長度。