casting - 如何将 &u8 转换为 usize

标签 casting rust

我正在研究 Rust 中的一些编码挑战,其中一个问题是确定一个短语是否是全字母组合。我看到了以下实现:

// Copy chars into a vector, sort and remove duplicates
let mut chars: Vec<char> = pangram.chars().collect();
chars.sort();
chars.dedup();

但是,由于排序的原因,此解决方案的时间是 O(nlogn)。我可以在 O(n) 时间内完成,但我遇到了问题。

下面是我尝试编写的代码:

fn is_pangram(s: String) -> bool {
    let mut num_seen = 0;
    let mut seen: [bool; 26] = [false; 26];

    for c in s.to_lowercase().as_bytes() {
        // ASCII 10 is newline character
        if c as usize == 10 {
            break;
        }

        // Lowercase ASCII is 97 to 122
        if !seen[122 - c as usize] {
            seen[122 - c as usize] = true;
            num_seen += 1;
        }
    }
    return num_seen == 26;
}

我收到以下错误:

18:55 $ rustc pangram.rs

pangram.rs:10:12: 10:22 error: casting &u8 as usize is invalid

pangram.rs:10 if c as usize == 10 { pangram.rs:10:12: 10:22 help: cast through a raw pointer first

pangram.rs:14:24: 14:34 error: casting &u8 as usize is invalid

pangram.rs:14 if !seen[122 - c as usize] { pangram.rs:14:24: 14:34 help: cast through a raw pointer first

pangram.rs:15:24: 15:34 error: casting &u8 as usize is invalid

pangram.rs:15 seen[122 - c as usize] = true;

pangram.rs:15:24: 15:34 help: cast through a raw pointer first

error: aborting due to 3 previous errors

我试过将 c 转换为 *mut usize 并将 c 转换为 *const usize,但均无效。我做了多少这项工作?

最佳答案

这是一个非常简单的更改——实际上是一个字符:

    for &c in s.to_lowercase().as_bytes() {
        ^

您试图将引用(as_bytes 的结果)视为常规值,但这是行不通的。

您可以按照我上面的操作(将 for c in 更改为 for &c in)或替换所有出现的 c for 循环与 *c;他们基本上做同样的事情。

关于casting - 如何将 &u8 转换为 usize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467506/

相关文章:

java - 将对象类型转换成一对

c++ - 被 (char *) cast 搞糊涂了

java - 将 double 强制转换为 long,奇怪的异常

rust - 是否有一种紧凑且惯用的方式来打印错误并返回而不返回错误?

rust - Cargo Clippy 抛出错误 'Question mark operator is useless here' - 建议可以实现吗?

rust - 在Rust中切换2d阵列中的列和行的最佳方法是什么?

c - C 是否提供运算符来检查类型的签名?

抛弃指向 const 的指针数组中的常量性,以及有关 C 的其他问题

rust - 如何编写一个转发到 vec 的可变 Rust 宏!宏?

types - 所有特征对象的默认特征方法实现