gpt4 book ai didi

casting - 如何将 &u8 转换为 usize

转载 作者:行者123 更新时间:2023-11-29 08:03:13 24 4
gpt4 key购买 nike

我正在研究 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com