- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 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
asusize
is invalidpangram.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
asusize
is invalidpangram.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
asusize
is invalidpangram.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/
我是一名优秀的程序员,十分优秀!