如何将字符转换为字符串?

67
这个问题涉及到Rust的预发布版本。这个更年轻的问题类似于这个。 我尝试使用println打印一个符号:
fn main() {
    println!('c');
}

但是我遇到了以下错误:

$ rustc pdst.rs
pdst.rs:2:16: 2:19 error: mismatched types: expected `&str` but found `char` (expected &str but found char)
pdst.rs:2     println!('c');
                          ^~~
error: aborting due to previous error

如何将char转换为string?

直接强制类型转换不起作用:

let text:str = 'c';
let text:&str = 'c';

它返回:

pdst.rs:7:13: 7:16 error: bare `str` is not a type
pdst.rs:7     let text:str = 'c';
                       ^~~
pdst.rs:7:19: 7:22 error: mismatched types: expected `~str` but found `char` (expected ~str but found char)
pdst.rs:7     let text:str = 'c';
                             ^~~
pdst.rs:8:20: 8:23 error: mismatched types: expected `&str` but found `char` (expected &str but found char)
pdst.rs:8     let text:&str = 'c';
                                  ^~~
3个回答

85

使用char::to_string,它是ToString特征的一个实现,具体请看这里:

fn main() {
    let string = 'c'.to_string();
    // or
    println!("{}", 'c');
}

2
是的,奇怪的是文档中提到了to_string(),但实际上从未定义它。 - Josh Hansen
3
这段话来自于ToString特质,任何实现了Display特质的内容都会自动实现该特质,包括char。(impl<T> ToString for T where T: Display + ?Sized) 然而,这种间接性意味着它不会在文档中显示,你需要自己记住或学习。 - Alex

25

使用 .to_string() 会在堆上分配 String。通常这不是什么问题,但如果你希望避免这种情况,并且直接获取 &str 切片,则可以使用下面的方法:

```rust fn main() { let s = "Hello, world!"; let slice = &s[..]; } ```
let mut tmp = [0u8; 4];
let your_string = c.encode_utf8(&mut tmp);

21
您现在可以使用c.to_string(),其中c是您类型为char的变量。

6
虽然这似乎没有明确记录,但它是正确的,因为字符实现了Display,并且Display实现需要to_string,但您无法从Display文档中了解到这一点,而是在ToString特性上有记录。这并不是很好的文档。 https://doc.rust-lang.org/std/string/trait.ToString.html - Bjorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接