< 返回版块

hzqd 发表于 2019-02-10 01:00

萌新弱弱的问一个小白问题: 我想做一个加法计算的工具,比如: 输入:1 2 3 4 5 6 7 8 9 输出:45

我之前学过一点点kotlin,它一行代码就搞定了:

readLine()!!.split(" ").map{ it.trim().toInt() }.sum().let(::println)

但是Rust想了半天才憋出一点点不正确的代码:

fn add() -> usize {
    let mut a = String::new().split_whitespace().map(|x| x.trim().parse().unwrap()).sum();
    std::io::stdin().read_line(&mut a).unwrap()
}

fn main() {
    println!("{}", add());
}

请问,我应该如何修改代码呢?大家有没有什么好的想法和建议给我?谢谢。

评论区

写评论
作者 hzqd 2019-02-10 19:40

感谢解答!

@XG.Ley a要先读进来才能进行后续操作。x.parse这里可能需要指定转换的类型。 use std::io;

fn sum(s: &str) -> usize { s.split_whitespace() .filter_map(|c| c.parse::().ok()) .sum() }

fn get_line() -> String { let mut s = String::new(); io::stdin().read_line(&mut s).unwrap(); return s; }

fn main() { let s = get_line(); println!("{:?}", sum(&s)); }

作者 hzqd 2019-02-10 14:35

感谢解答!

@XG.Ley a要先读进来才能进行后续操作。x.parse这里可能需要指定转换的类型。 use std::io;

fn sum(s: &str) -> usize { s.split_whitespace() .filter_map(|c| c.parse::().ok()) .sum() }

fn get_line() -> String { let mut s = String::new(); io::stdin().read_line(&mut s).unwrap(); return s; }

fn main() { let s = get_line(); println!("{:?}", sum(&s)); }

XG.Ley 2019-02-10 08:39

a要先读进来才能进行后续操作。x.parse这里可能需要指定转换的类型。

use std::io;

fn sum(s: &str) -> usize {
	s.split_whitespace()
		.filter_map(|c| c.parse::<usize>().ok())
		.sum()
}

fn get_line() -> String {
	let mut s = String::new();
	io::stdin().read_line(&mut s).unwrap();
	return s;
}

fn main() {
	let s = get_line();
	println!("{:?}", sum(&s));
}
1 共 3 条评论, 1 页