提问人:Miodek 提问时间:11/5/2023 更新时间:11/5/2023 访问量:57
获取与父字符串相关的 &str 的原始切片
Get original slices of &str in relation to parent String
问:
假设我有一个 ,我从中取出一个切片 ()。是否有可能仅通过切片本身来找出该切片的开始和结束位置?String
&str
例:
let original_string = String:from("Hello, world!");
let slice: &str = &original_string[0..5];
let slice_indexes = slice.some_function(); // (usize, usize)
println!("{:?}", slice_indexes);
答:
3赞
Chayim Friedman
11/5/2023
#1
否,因为切片不保留此信息。我们拥有的唯一信息是指向其开头和长度的指针,而不是 的开头,因此我们无法知道它离那里有多远。String
如果你有原始字符串,你可以用 O(1) 复杂度来做:
fn get_position(full: &str, part: &str) -> (usize, usize) {
let start = part.as_ptr() as usize - full.as_ptr() as usize;
let end = start + part.len();
(start, end)
}
fn main() {
let original_string = String::from("Hello, world!");
let slice: &str = &original_string[0..5];
let slice_indexes = get_position(&original_string, slice);
println!("{:?}", slice_indexes);
}
游乐场。
请注意,此函数不会检查数据是否真的来源于此,并且在这种情况下会默默地给出错误的结果。String
评论
0赞
Miodek
11/5/2023
这样就可以了,谢谢
评论