Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何按字符对字符串进行迭代_String_Iterator_Rust - Fatal编程技术网

String 如何按字符对字符串进行迭代

String 如何按字符对字符串进行迭代,string,iterator,rust,String,Iterator,Rust,我有一个字符串,我需要扫描出现的每一个“foo”并读取它后面的所有文本,直到第二个“。因为Rust没有包含字符串函数,所以我需要通过字符扫描进行迭代。我该怎么做 编辑:Rust的&str有一个方法和步骤 我需要通过字符扫描进行迭代 返回字符串中字符的迭代器 for c in my_str.chars() { // do something with `c` } for (i, c) in my_str.chars().enumerate() { // do something

我有一个字符串,我需要扫描出现的每一个“foo”并读取它后面的所有文本,直到第二个
。因为Rust没有
包含
字符串函数,所以我需要通过字符扫描进行迭代。我该怎么做

编辑:Rust的
&str
有一个方法和步骤

我需要通过字符扫描进行迭代

返回字符串中字符的迭代器

for c in my_str.chars() { 
    // do something with `c`
}

for (i, c) in my_str.chars().enumerate() {
    // do something with character `c` and index `i`
}
如果您对每个字符的字节偏移量感兴趣,可以使用

查看
.peek()
,并使用
peek()
向前看。它是这样包装的,因为它支持UTF-8码点,而不是简单的字符向量

您还可以创建一个
char
s的向量,并从那里开始处理它,但这需要更多的时间和空间:

let my_chars: Vec<_> = mystr.chars().collect();
let my_chars:Vec=mystr.chars().collect();
字符的概念非常模糊,根据您使用的数据类型,它可能意味着许多不同的东西。最明显的答案是方法。但是,这并不像宣传的那样有效。看起来像一个“字符”的是什么“对您而言,实际上可能由多个Unicode代码点组成,这可能会导致意外的结果:

“a̐”。.chars()/=>['a','\u{310}']
对于实际的字符串处理,您需要使用graphemes。图位由一个或多个表示为字符串片段的unicode代码点组成。这些更符合人类对“人物”的感知。要创建graphemes迭代器,可以使用板条箱:

使用unicode_分段::unicode分段;
对于我的街道中的grapheme.graphemes(真){
// ...
}
如果您使用的是原始ASCII,则上述任何一项都不适用于您,您只需使用
字节
迭代器即可:

my_str.bytes()中的字节的
{
// ...
}

尽管如此,如果您使用的是ASCII,那么可以说您根本不应该使用
String
/
&str
,而应该使用
Vec
/
&[u8]
或板条箱。

您可以展示一些输入和所需输出的示例吗?这将帮助我们更清楚地了解您正试图实现的目标。这里有一个这样的循环示例,尽管我认为有更简单的方法。请注意,有许多字符串搜索算法,它们的时间复杂度并不是一种简单的方法(
O(n*m)
)。这听起来像正则表达式。请注意,通过这种方式获得的字符可能与人类感知的字符的直观定义不一致。有关更多详细信息,请参阅。