gpt4 book ai didi

Rust:拆分字符串以获取单词及其位置

转载 作者:行者123 更新时间:2023-12-04 01:04:01 25 4
gpt4 key购买 nike

Rust 有内置的函数来围绕空格分割字符串,例如:

let mut iter = " Hello world".split_whitespace();

assert_eq!(Some("Hello"), iter.next());
assert_eq!(Some("world"), iter.next());
但是,我想要一种将字符串拆分为单词的方法,并在字符串中具有相应的位置。
let mut iter = ??????(" Hello world");

assert_eq!(Some((1, "Hello")), iter.next());
assert_eq!(Some((7, "world")), iter.next());
鉴于以下情况,我完全不知道从哪里开始:
  • 内置splitsplit_whitespace函数“消耗”空白,所以我不知道在给定元素之前出现多少空白。我应该从split('')开始吗? ,并以某种方式将非空白“分组”在一起?
  • 有一个 match_indices 执行类似操作的函数,但它只能查找给定的字符串或字符(使用闭包)。

  • 有没有内置的东西?或者我需要遍历 std::str::Chars迭代器?
    如果是这样,我将如何从 Chars 开始给定字符的迭代器,到代表下一个单词的字符串?有没有安全的方法从函数返回它? (到目前为止,编译器从未让我这样做)

    最佳答案

    您可以利用 split_whitespace() 的事实。返回指向原始切片的切片,并计算所需索引作为原始切片地址与每个子切片地址的距离:

    fn addr_of(s: &str) -> usize {
    s.as_ptr() as usize
    }

    fn split_whitespace_indices(s: &str) -> impl Iterator<Item = (usize, &str)> {
    s.split_whitespace()
    .map(move |sub| (addr_of(sub) - addr_of(s), sub))
    }

    fn main() {
    let mut iter = split_whitespace_indices(" Hello world");

    assert_eq!(Some((1, "Hello")), iter.next());
    assert_eq!(Some((7, "world")), iter.next());
    }

    关于Rust:拆分字符串以获取单词及其位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67098199/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com