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