先上代码:
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参数的长度。