Rust 如何在不使用第三方库的情况下洗牌除第一个和最后一个元素之外的向量?
我有一项任务要洗牌的话,但每个字的第一个和最后一个字母必须保持不变。当我尝试使用Rust 如何在不使用第三方库的情况下洗牌除第一个和最后一个元素之外的向量?,rust,Rust,我有一项任务要洗牌的话,但每个字的第一个和最后一个字母必须保持不变。当我尝试使用filter()时,它无法正常工作 const SEPARATORS: &str = " ,;:!?./%*$=+)@_-('\"&1234567890\r\n"; fn main() { print!("MAIN:{:?}", mix("Evening,morning")); } fn mix(s: &str) -> String { let mut a: Vec&
filter()
时,它无法正常工作
const SEPARATORS: &str = " ,;:!?./%*$=+)@_-('\"&1234567890\r\n";
fn main() {
print!("MAIN:{:?}", mix("Evening,morning"));
}
fn mix(s: &str) -> String {
let mut a: Vec<char> = s.chars().collect();
for group in a.split_mut(|num| SEPARATORS.contains(*num)) {
if group.len() > 4 {
let k = group.first().unwrap().clone();
let c = group[group.len() - 1].clone();
group
.chunks_exact_mut(2)
.filter(|x| x != &[k])
.for_each(|x| x.swap(0, 1))
}
}
let s: String = a.iter().collect();
s
}
常量分隔符:&str=“,;:!?./%*$=+)@-(“\”&1234567890\r\n”;
fn main(){
印刷!(“主要:{:?}”,混合(“晚上,早上”);
}
fn混合(s:&str)->字符串{
让mut a:Vec=s.chars().collect();
对于a.split_mut(|num | SEPARATORS.contains(*num))中的组{
如果group.len()大于4{
设k=group.first().unwrap().clone();
设c=group[group.len()-1].clone();
组
.chunks\u exact\u mut(2)
.filter(|x | x!=&[k])
.对于每个交换(| x | x.swap(0,1))
}
}
设s:String=a.iter().collect();
s
}
这就是你要找的吗
fn mix(s:&str)->String{
让mut a:Vec=s.chars().collect();
对于a.split_mut(|num | SEPARATORS.contains(*num))中的单词{
如果words.len()大于4{
让首字母=words.first().unwrap().clone();
让最后一个字母=单词[words.len()-1].clone();
单词[0]=最后一个字母;
单词[words.len()-1]=首字母;
}
}
设s:String=a.iter().collect();
s
}
你想要什么还不完全清楚。在你的示例代码中,你可以使用assert_eq!
,而不是编写print!
,来显示你期望的结果,给定输入。例如assert_eq!(mix(“晚上,早上”),“Eorning,mvening”);
是否使用rand::seq::SliceRandom;group[1..group.len 1].shuffle()做你想做的事?(请参阅)那么你就不走运了:标准库中没有随机值。获得随机生成器的公认“标准”方法是rand
板条箱。顺便说一句,在回复别人的评论时,你应该在他们的名字前面使用@
(例如@jmb
)。这样我们就可以收到通知,我们就不会错过你的答复。我需要在单词的第一个字母和最后一个字母之间更改字母顺序,但第一个字母和最后一个字母不得更改。