У меня есть строка, и я хочу обновить значение символа в определенном индексе строки. Я знаю, что индекс, который я собираюсь обновить, существует в строке из-за моего типа ввода. Моей первой идеей было получить изменяемую ссылку на срез в нужном мне индексе, например так:
let mut s = "foo".to_owned();
let index = s.get_mut(1..1).unwrap();
*index = "b";
println!("{}", s);
но компилятор не позволит мне:
he size for values of type `str` cannot be known at compilation time
doesn't have a size known at compile-time
help: the trait `std::marker::Sized` is not implemented for `str`
Что мне удалось сделать, так это изменить точный байт, используя небезопасный as_bytes_mut
:
let mut s = "foo".to_owned();
unsafe {
let bytes = s.as_bytes_mut();
let index = &mut bytes[2..3];
'b'.encode_utf8(index);
}
println!("{}", s); // fob
Могу ли я сделать это, не используя небезопасный код?
replace_range
а>. Посмотрите, как это работает на игровой площадке - person kmdreko   schedule 19.02.2021