如何在Rust中从另一个字符中减去一个字符?

YLy*_*Lyu 6 char rust

在Java中,我可以做到这一点.

int diff = 'Z' - 'A'; // 25
Run Code Online (Sandbox Code Playgroud)

我在Rust中尝试了同样的方法:

fn main() {
    'Z' - 'A';
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:

error[E0369]: binary operation `-` cannot be applied to type `char`
 --> src/main.rs:2:5
  |
2 |     'Z' - 'A';
  |     ^^^^^^^^^
  |
  = note: an implementation of `std::ops::Sub` might be missing for `char`
Run Code Online (Sandbox Code Playgroud)

如何在Rust中执行等效操作?

mca*_*ton 9

在Unicode世界中,该操作毫无意义,并且在ASCII世界中几乎没有任何意义,这就是Rust不直接提供它的原因,但根据您的使用情况,有两种方法可以执行此操作:

  • 将字符转换为标量值: 'Z' as u32 - 'A' as u32
  • 使用字节字符文字: b'Z' - b'A'

  • 对字符代码执行算术有几个有效的理由。一个例子是将停止密码实现为:“char new = 'a' + (old - 'a' + 1) % 26”。 (2认同)
  • @KartikSoneji,这在 Unicode 世界中毫无意义,在 ASCII 世界中几乎没有意义。在检查字节确实是拉丁字母表中的字母后,您可以对字节执行此操作。 (2认同)
  • @KartikSoneji 我不知道你要去哪里。`char` 确实实现了 `PartialOrd`,这与 `Sub` 完全正交。 (2认同)