gpt4 book ai didi

rust - 试图把 rust 分开

转载 作者:行者123 更新时间:2023-12-03 11:41:32 29 4
gpt4 key购买 nike

我有这串

abcdef x y z
或这个
"ab cd ef" x y z
我正试图将其解析为
s1 = "abcdef"
arr = ["x","y","z"]
或者
s1 = "ab cd ef"
arr = ["x","y","z"]
我尝试了以下内容(str是起始字符串)
    let chars = str.chars().peekable();
let s1:String = if *chars.peek().expect("value isnt empty") == '\"'{
chars.skip(1).take_while(|c| *c!= '\"').collect()
}else{
chars.take_while(|c| *c!= ' ').collect()
};

let remainder_str = chars.collect::<String>();
let remainder = remainder_str.split_whitespace();

let mut arr: Vec<&OsStr> =
remainder.map(|s| OsStr::new(s)).collect();
即创建一个char的迭代器,并沿着字符串向下移动,以在我执行操作时将位拉出。
不起作用,因为第一个收集吃了“炭”。我敢肯定,我可以通过沿着索引的字符依次检查每个字符(又名蛮力)来做到这一点,但这似乎不是习惯性的使用rust 。
任何人都可以提出更好的方法。

最佳答案

您的想法进入编译阶段:

fn doit(str: String) -> (String, Vec<String>) {
let mut chars = str.chars().peekable();
let s1:String = if *chars.by_ref().peek().expect("value isnt empty") == '\"'{
chars.by_ref().skip(1).take_while(|c| *c!= '\"').collect()
}else{
chars.by_ref().take_while(|c| *c!= ' ').collect()
};

let remainder_str = chars.collect::<String>();
let remainder = remainder_str.split_whitespace();

let arr: Vec<String> =
remainder.map(|s| s.to_string()).collect();
(s1, arr)
}
by_ref可能是您的 friend 。
但是请注意,此方法很可能不是您真正想要的,因为它会在所有位置分配所有内容(所有 String等)。
仅使用引用原始字符串的字符串切片可能会更好。

关于rust - 试图把 rust 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64762724/

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