gpt4 book ai didi

parsing - .next()方法在 `std::string::String`中找不到

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

我有一个包含以下内容的文件:

144NFFFFL
我希望能够读取每个字符并通过解析它们始终将前3个转换为整数(i32)。由于某种原因,我的 .next()调用无法编译。
fn main() {
let mut test = Robot::new(0, 3, 4, Orientation::N, vec![Direction::F, Direction::F]);
println!("id = {:#?} , x = {:#?} , y = {:#?} , ori = {:#?} , dir = {:#?} ,",test.id,test.x,test.y,test.orientation,test.direction);

let mut file = File::open("instruction.txt").expect("Impossible d'ouvrire le fichier"); //ouverture du fichier instruction.txt et le stock dans la var mut
let mut contenue = String::new();
file.read_to_string(&mut contenue).expect("Impossible de lire le fichier");
contenue = line!(.split_whitespace()).to_string();

let mut tmp = (contenue.next()).to_string();
test.id = tmp.parse::<i32>().unwarp();

tmp = (contenue.next()).to_string();
test.x = tmp.parse::<i32>().unwarp();

tmp = (contenue.next()).to_string();
test.y = tmp.parse::<i32>().unwarp();

tmp = contenue.next();
test.orientation = tmp;
}
错误=>
let mut tmp = (contenue.next()).to_string();
| ^^^^ method not found in `std::string::String`

error[E0599]: no method named `next` found for struct `std::string::String` in the current scope
--> src/main.rs:120:21
|
120 | tmp = (contenue.next()).to_string();
| ^^^^ method not found in `std::string::String`

error[E0599]: no method named `next` found for struct `std::string::String` in the current scope
--> src/main.rs:123:21
|
123 | tmp = (contenue.next()).to_string();
| ^^^^ method not found in `std::string::String`

error[E0599]: no method named `next` found for struct `std::string::String` in the current scope
--> src/main.rs:126:20
|
126 | tmp = contenue.next();
| ^^^^ method not found in `std::string::String`

error[E0599]: no method named `next` found for struct `std::string::String` in the current scope
--> src/main.rs:131:36
|
131 | let carac = match contenue.next()
| ^^^^ method not found in `std::string::String

最佳答案

next()iterator method。要使用它,您需要一个String迭代器。通常是 chars()

let iter = contenue.chars();
一旦有了字符迭代器,就可以使用 take(3) 迭代仅前三个字符。然后使用 collect()将它们连接在一起成为一个字符串。然后 parse它。
let id: u32 = iter
.take(3)
.collect::<String>()
.parse::<u32>()
.unwrap();
println!("ID = {}", id);
由于这是一个迭代器,它将记住其位置。对 iter.next()的下一个调用将是 N。这样我们就可以打印出其余字符。
for c in iter {
println!("c = {}", c);
}
error[E0382]: use of moved value: `iter`
--> test.rs:12:14
|
3 | let iter = contenue.chars();
| ---- move occurs because `iter` has type `std::str::Chars<'_>`, which does not implement the `Copy` trait
4 |
5 | let id: u32 = iter
| ---- value moved here
...
12 | for c in iter {
| ^^^^ value used here after move
问题是 iter.take()拥有了迭代器的所有权。我们需要使用 by_ref() 来借用它。而且我们需要使迭代器可变。
fn main() { 
let contenue = "144NFFFFL";
let mut iter = contenue.chars();

let id: u32 = iter
.by_ref()
.take(3)
.collect::<String>()
.parse::<u32>()
.unwrap();
println!("ID = {}", id);

for c in iter {
println!("c = {}", c);
}
}

关于parsing - .next()方法在 `std::string::String`中找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64638478/

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