当前位置:  开发笔记 > 后端 > 正文

如何投射和使用u.8

如何解决《如何投射和使用u.8》经验,为你挑选了1个好方法。

我正在研究Rust中的一些编码挑战,其中一个问题是确定一个短语是否是一个pangram.我见过以下实现:

// Copy chars into a vector, sort and remove duplicates
let mut chars: Vec = 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错误:铸造&u8usize无效

pangram.rs:10如果c as usize == 10 {pangram.rs:10:12:10:22 help:首先通过原始指针

pangram.rs:14:24:14:34错误:铸造&u8usize无效

pangram.rs:14 if!see [122 - c as usize] {pangram.rs:14:24:14:34 help:首先通过原始指针

pangram.rs:15:24:15:34错误:转换&u8usize无效

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

pangram.rs:15:24:15:34帮助:首先通过原始指针

错误:由于之前的3个错误导致中止

我试过铸造c as *mut usizec as *const usize,但既不工作.我做了多少这个工作?



1> Doorknob..:

这是一个非常简单的变化 - 一个单一的角色,事实上:

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

您试图将引用(这是as_bytes导致的结果)视为常规值,但这不起作用.

您可以执行上面所做的操作(更改for c infor &c in)或替换循环c内部的所有实例; 他们基本上做同样的事情.for*c

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有