rust 如何将一个字符串转换为数组,然后调用该数组中的特定字符来创建一个新字符串?

wpx232ag  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(348)

现在我正在键入它,这看起来像是一个非常复杂的过程,但肯定可以更容易地解决。(从使用者输入),将字符分隔成数组,然后调用单个字符来生成一个新的字符串。(不确定函数是否是正确的术语,抱歉)。下面是我目前为止的代码:

use std::io;

fn main() {
  println!("Enter P1:");

  let mut mono = String::new();

  io::stdin()
    .read_line(&mut mono)
    .expect("Failed to read line");

  let mono: Vec<char> = mono.chars().collect();
  let x = [mono[0],mono[1]].join("");
  println!("Square 1: {x}");
}

我是Rust的新手,所以任何建议都非常有帮助。谢谢!

a7qyws3x

a7qyws3x1#

如果目标只是从输入中提取一个子字符串,那么可以简单得多

use std::io;

fn main() {
  println!("Enter P1:");

  let mut mono = String::new();

  io::stdin()
    .read_line(&mut mono)
    .expect("Failed to read line");

  let x = &mono[..2].to_string(); // get rhe slice you need and create a new string from it

  println!("Square 1: {x}");
}

修改
正如在注解中指出的,请注意,在真实的生活中的用例中,您应该在使用任意索引对字符串进行切片之前检查字符串的长度......此示例很容易在运行时崩溃。

iovurdzv

iovurdzv2#

你可以只对原始字符串str[a..b].to_string()进行切片。
如果你需要使用char数组,这里有String::from_iter,并收集到一个String中。Example

fn main() {
    let string = "My String".to_string();
    let substr1 = string[0..3].to_string();
    let substr2 = string[3..].to_string();
    println!("substr1 = {}", substr1);
    println!("substr2 = {}", substr2);

    let chars: Vec<_> = string.chars().collect();

    let collected_substr1: String = chars.iter().take(2).collect();
    let collected_substr2: String = chars.iter().skip(3).collect();
    println!("collected_substr1 = {}", collected_substr1);
    println!("collected_substr2 = {}", collected_substr2);

    let from_iter_substr1 = String::from_iter([chars[0], chars[1]].iter());
    let from_iter_substr2 = String::from_iter(chars.iter().skip(3));
    println!("from_iter_substr1 = {}", from_iter_substr1);
    println!("from_iter_substr2 = {}", from_iter_substr2);

}
4xrmg8kj

4xrmg8kj3#

仅供参考,Vec是一种类型。
join只适用于字符串切片(&str),而不适用于char s。假设您只是尝试在不使用分隔符的情况下连接两个字符,则可以执行以下操作

let x: String = mono.chars().take(2).collect();

相关问题