通过字符索引


use std::io;
fn solution(inputString: String) -> bool {

let mut num_bool = true;
let mut index_tracker = 0;

/*
let mut inputString = String::new();

io::stdin()
.read_line(&mut inputString)
.expect("Not valid");
inputString = inputString.trim().to_string();
*/


for new_char in inputString.chars() {
if new_char != inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)) {
num_bool = false;
break;
//print!("{:?} ", inputString.chars().nth(new_char));
//print!("{:?} n", inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)));
//print!("nNext");
}
index_tracker += 1;
}
print!("{}", num_bool);
return num_bool;
}
Error Log: error[E0308]: mismatched types
--> main.rs on line 21:24
|
26 |         if new_char != inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)) {
|                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `char`, found enum `Option`
|
= note: expected type `char`
found enum `Option<char>`
error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0308`.

编译器正试图告诉您nth()函数返回一个Option,您正试图将其与char进行比较。

有很多方法可以检查Option的基本值。一个典型的惯用解决方案是使用if let Some(c) = an_option_value {...}

你到底想在这个函数中做什么?就性能而言,此实现看起来效率非常低。

正如另一个回答者所指出的,nth返回一个Option<char>

以下是几种可能的解决方案:

  • unwrap()——如果你确信没有办法,你可以尝试访问不存在的元素

  • unwrap_or()——如果你想更全面地处理可能出现的错误

您当然可以使用任何其他技术来处理Option,如unwrap_or_else()if let,但以上两种对我来说似乎是最自然的

最新更新