在0.10中反转一个字符串

时间:2014-06-09 02:27:51

标签: rust

我在最新版本的锈中反转字符串时出现问题,我看到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();

1 个答案:

答案 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>();