MST

星途 面试题库

面试题:Rust字符串从UTF - 8到ASCII编码转换

在Rust中,给定一个UTF - 8编码的字符串,编写代码将其转换为ASCII编码,如果字符串中包含非ASCII字符则返回错误。请说明可能会用到的库和关键步骤。
48.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

可能用到的库

在Rust中,处理字符串相关操作通常会用到标准库 std::stringstd::str

关键步骤

  1. 检查字符串是否为有效的UTF - 8编码,Rust中字符串默认是UTF - 8编码的,这一步通常可以省略。
  2. 遍历字符串的每一个字符,检查是否为ASCII字符(ASCII字符的范围是U+0000到U+007F)。
  3. 如果所有字符都是ASCII字符,则将其转换为ASCII编码,在Rust中,String 本身已经是UTF - 8编码,而ASCII是UTF - 8的子集,所以可以直接当作ASCII处理。如果包含非ASCII字符则返回错误。

示例代码

fn to_ascii(s: &str) -> Result<String, String> {
    if s.bytes().all(|b| b <= 127) {
        Ok(s.to_string())
    } else {
        Err("String contains non - ASCII characters".to_string())
    }
}

你可以这样调用这个函数:

fn main() {
    let ascii_str = "hello";
    let non_ascii_str = "你好";

    match to_ascii(ascii_str) {
        Ok(result) => println!("Converted to ASCII: {}", result),
        Err(error) => println!("Error: {}", error),
    }

    match to_ascii(non_ascii_str) {
        Ok(result) => println!("Converted to ASCII: {}", result),
        Err(error) => println!("Error: {}", error),
    }
}