先上代碼:
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參數的長度。