2014-03-01 271 views
26

我有一個字符串,我需要掃描每個「foo」出現的地方並讀取它後面的所有文本,直到第二個"由於Rust對於字符串沒有contains函數,因此我需要通過掃描字符進行迭代。我將如何做到這一點?如何遍歷字符串

編輯:鐵鏽的&strcontains()find()方法。

+2

能告訴你的一些投入與預期的產出的例子嗎?它將幫助我們更清楚地看到你準備完成的任務。 – csmckelvey

+0

這裏有一個這樣的循環的例子http://rustbyexample.org/loops.html,雖然我認爲那裏有更簡單的方法。 –

+0

請注意,有許多字符串搜索算法,它們的時間複雜度不是一個簡單的方法('O(n * m)')。 http://en.wikipedia.org/wiki/String_searching_algorithm – VasyaNovikov

回答

48

我需要通過掃描字符進行迭代。

.chars() method返回字符串中字符的迭代器。例如

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` 
} 

如果您對每個字符的字節偏移量感興趣,可以使用char_indices

查看.peekable(),並使用peek()展望未來。它是這樣包裝的,因爲它支持UTF-8代碼點,而不是簡單的字符向量。

您還可以創建的char秒的載體,並從那裏進行這項工作,但是這更多的時間和空間密集型:

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