我在最新版本的锈中反转字符串时出现问题,我看到this帖子但是我仍然遇到一些错误。我试图扭转一个字符串并比较两个没有任何运气:
fn is_palindromic(num: int) -> bool {
let num_str = num.to_str();
let rev_num_str = num_str.chars_rev().collect();
if rev_num_str == num_str {
return true;
}else{
return false;
}
}
然后我收到错误:
main.rs:8:28: 8:39 error: type `collections::string::String` does not implement
any method in scope named `chars_rev`
main.rs:8 let rev_num_str = num_str.chars_rev();
答案 0 :(得分:5)
许多传统上有用的字符串方法都是在std::str::StrSlice特征中定义的。要从String
值获取切片,您可以调用as_slice方法。看起来chars_rev
特征中不再定义StrSlice
,但有chars
方法返回迭代器Chars。
这个特殊的迭代器实现了DoubleEndedIterator特征,这意味着可以通过调用rev
来反转它。这应该就是你所需要的:
fn is_palindromic(num: int) -> bool {
let num_str = num.to_str();
let rev_num_str: String = num_str.as_slice().chars().rev().collect();
return rev_num_str == num_str;
}
fn main() {
println!("{}", is_palindromic(12321));
}
请注意,我还向rev_num_str
添加了类型注释,因为编译器无法推断其具体类型(collect
是多态的并且可以构建many different kinds of "container" values)。您也可以选择实例化collect
:
let rev_num_str = num_str.as_slice().chars().rev().collect::<String>();