rust - 发送 &str 数字作为输入未通过条件检查,而硬编码相同的 &str 数字则不会 (RUST)
问题描述
您好,我正在尝试使用get_input()
which 来获取用户输入,这将返回一个String
. get_input()
调用check_input()
which 用于match
检查输入String
是否只有数字,并将bool
根据输入返回 a。我切片String
并将其存储为,即使输入值只是数字,&str
我的check_input()
函数也会返回。false
现在,如果我硬编码 a&str
并将其传递给它,match
它将返回true
。
我正在尝试学习 Rust,并且对 lang 非常陌生(3 天前开始使用 Rust),因此非常欢迎对出了什么问题进行深入解释。请给我任何你认为需要擅长 Rust 的批评/建议。
代码:
// // use std::io; // to take user input
use std::io; // to take user input
fn main() {
//let mut grid_size = get_input().trim().parse::<i64>().unwrap();
//println!("{}", grid_size + 2 );
println!("From main ---> {:?}",checkinput());
}
fn get_input() -> String{
// fn get_input() -> &'static str{
println!("Please enter the grid size" );
let mut input_string = String::new();
std::io::stdin().read_line(&mut input_string).expect("Failed");
return input_string;
// let my_own_str: String = input_string.to_owned();
// let sliced_str: &str = &my_own_str[..];
// println!("sliced_str ---> {}\nmy_own_string ---> {}", sliced_str, my_own_str);
// return sliced_str;
// let my_test_str: &str = "2";
// return my_test_str;
}
fn checkinput() -> bool{
// match get_input().bytes().all(|c| c.is_ascii_digit()) {
// let test = get_input().bytes().all(|c| c.is_ascii_digit());
// let test = get_input().chars().all(char::is_numeric);
let test_var = get_input(); // i get a String
let my_own_str: String = test_var.to_owned(); // i own the Strin
let sliced_str: &str = &my_own_str[..]; // i cut Strin into str
let sliced_str_new: &str = "123312"; // i cut Strin into str
// let sliced_str: &str = test_var.as_str(); // i cut Strin into str
// let sliced_str: &str = "123"; // if i put a str "123" then true
println!("sliced_str ---> {}", sliced_str); // print to check input val
println!("my_own_string ---> {}", my_own_str); // print to check input val
let test = sliced_str.chars().all(char::is_numeric); // check if my str is a numeric
println!("---------------------------------------");
println!("Type of my_own_str");
find_type(&my_own_str);
println!("---------------------------------------");
println!("Type of sliced_str");
find_type(&sliced_str);
println!("---------------------------------------");
println!("Type of sliced_str_new");
find_type(&sliced_str_new);
println!("---------------------------------------");
println!("TEST ---> {}", test); // print bool
match test {
true => return true,
false => return false,
}
}
fn find_type<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
解决方案
.trim()
在之前添加.chars()
:
let test = sliced_str.trim().chars().all(char::is_numeric);
推荐阅读
- android - 一行中的自定义吐司
- javascript - 推送数组在Javascript中的循环内不起作用
- bash - 使用没有 docker-machine 的 bash 脚本部署 docker swarm
- sql-server - EXCEL调用sql server存储过程=>列问题
- asp.net - 不在 Vb.net 中下载 Zip 文件
- php - 如何使用 php-crm-toolkit 在 Microsoft Dynamics Online CRM 中创建案例或事件
- python - 卡在“如果”,它不会继续过去
- sql-server - 从动态 SQL 中获取数据库名称的名称
- octobercms - 注册后如何创建临时欢迎页面?
- firebase - 当我在文档中有 500 多个字段时,Firestore Web 控制台会滞后。有替代方案吗?