gpt4 book ai didi

rust - 如何根据 Rust String 或 &str 类型的索引删除子字符串?

转载 作者:行者123 更新时间:2023-12-03 11:37:19 25 4
gpt4 key购买 nike

我有一个 &str 类型的字符串,我想从中删除一个子字符串。我有一个算法来计算要移除的零件的开始和结束位置。我现在如何删除子字符串?
为了更清楚地说明这一点,如果我使用 C++,我会这样做:

#include<iostream>
#include<string>

int main(){
std::string foo = "Hello";
int start = 2,stop = 4;
std::cout<<foo;
foo.erase(start, stop - start);
std::cout<<std::endl<<foo<<std::endl;
}
我在 Rust 中的代码:
fn main(){
let mut foo: &str = "hello";
let start: i32 = 0;
let stop: i32 = 4;
//what goes here?
}

最佳答案

&str是一个不可变的切片,它有点类似于 std::string_view ,所以你不能修改它。相反,您可以使用迭代器并收集一个新的 String :

let removed: String = foo
.chars()
.take(start)
.chain(foo.chars().skip(stop))
.collect();
另一种方式是就地 String修改:
let mut foo: String = "hello".to_string();

// ...

foo.replace_range((start..stop), "");
但是请记住,最后一个示例在语义上是不同的,因为它对字节索引而不是字符索引进行操作。因此它可能会因错误使用而 panic (例如,当 start 偏移位于多字节字符的中间时)。

关于rust - 如何根据 Rust String 或 &str 类型的索引删除子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62497774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com