相关疑难解决方法(0)

你如何逐个字符地迭代

我有一个字符串,我需要扫描每次出现的"foo"并读取其后的所有文本,直到一秒钟".由于Rust没有contains字符串函数,我需要通过字符扫描来迭代它.我该怎么做?

编辑:Rust &str有一个contains()find()方法.

string iterator rust

50
推荐指数
3
解决办法
4万
查看次数

如何获得&str的最后一个字符?

在Python中,这将是final_char = mystring[-1].我怎么能在Rust做同样的事情?

我试过了

mystring[mystring.len() - 1]
Run Code Online (Sandbox Code Playgroud)

但我得到了错误 the type 'str' cannot be indexed by 'usize'

string rust

8
推荐指数
2
解决办法
4007
查看次数

我们什么时候应该在 Rust 中使用 unwrap 和 expect

我是 Rust 的新手,并试图了解我们什么时候应该使用 unwrap 和 expect。

这是一个示例代码:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();

    let query = args.get(1).unwrap();
    println!("query from unwrawp: {}", query);

    let query = args.get(1).expect("insufficient arguments");
    println!("query from expect: {}", query);

    //$ cargo run hello
    //OUTPUT:
    //query from expect: hello
    //query from unwrawp: hello

}
Run Code Online (Sandbox Code Playgroud)

我观察到的唯一区别是期望中有一个自定义的恐慌消息。
这两者是否可以互换,或者是否有任何特殊情况我们应该使用一种而不是另一种?

rust

8
推荐指数
2
解决办法
3117
查看次数

我如何借用Iterator?

我有一段我正在使用的代码,我在另一个Stack Overflow问题中找到

fn is_palindromic(num: i64) -> bool {
    let string = num.to_string();
    let bytes = string.as_bytes();
    let iter = bytes.iter();
    let n = bytes.len() / 2;
    equals(iter.take(n), iter.rev().take(n))
}
Run Code Online (Sandbox Code Playgroud)

当我最初找到它时这很好用,但是在2015年1月30日和2012年2月17日之间的Rust nightlies中发生了一些变化,导致弹出这个新错误:

src/program.rs:8:26: 8:30 error: use of moved value: `iter`
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                                          ^~~~
src/program.rs:8:12: 8:16 note: `iter` moved here because it has type `core::slice::Iter<'_, u8>`, which is non-copyable
src/program.rs:8     equals(iter.take(n), iter.rev().take(n))
                            ^~~~
Run Code Online (Sandbox Code Playgroud)

我查看了文档,但我似乎无法找到任何可能表明可能发生变化的内容.看起来这个take方法现在的行为可能有所不同,但我不确定如何解决克隆bytes和使用两个单独的迭代器之间的情况.

这似乎是一种解决看似非常常见问题的非常低效的方法,所以我想我可能会遗漏一些东西.

借用迭代器以使用类似方法的正确方法是std::iter::order::equals什么?

rust

2
推荐指数
1
解决办法
912
查看次数

Rust:迭代 ASCII 字符串字符的最有效方法

我原来的做法:

pub fn find_the_difference(s: String, t: String) -> char {
        let mut c:u8 = 0;
        for i in 0..s.chars().count() {
            c ^= t.chars().nth(i).unwrap() as u8 ^ s.chars().nth(i).unwrap() as u8;
        }
        return (c ^ t.chars().nth(s.chars().count()).unwrap() as u8) as char;
        
    }
Run Code Online (Sandbox Code Playgroud)

但它太慢了,而且我必须编写替换的所有内容都非常疯狂t[i] ^ s[i](请参阅下面的原始 C++ 函数)。所以我寻找其他东西,发现了这个方法,我们将字符串转换为字符数组,并得到了一些好的结果(从 8 毫秒到 0 毫秒)。

pub fn find_the_difference(s1: String, t1: String) -> char {
        let mut c:u8 = 0;
        let s: Vec<char> = s1.chars().collect();
        let t: Vec<char> = t1.chars().collect();

        for i in 0..s1.chars().count() …
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
5929
查看次数

标签 统计

rust ×5

string ×2

iterator ×1