diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-10-31 14:52:08 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-10-31 14:52:08 +0100 |
| commit | b0d60a7108bf022f743501b7b2e127fbae695260 (patch) | |
| tree | 1a291325e1405a716f4cf64d91ae6c45bf8cdcf8 | |
| parent | 7080ac15fb13c472985da692ca92c4a48b1f5575 (diff) | |
| download | rust-b0d60a7108bf022f743501b7b2e127fbae695260.tar.gz rust-b0d60a7108bf022f743501b7b2e127fbae695260.zip | |
Add a way to iterate over a str's chars to std::str
| -rw-r--r-- | src/lib/str.rs | 17 | ||||
| -rw-r--r-- | src/test/stdtest/str.rs | 13 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/lib/str.rs b/src/lib/str.rs index 29ee1b9340f..74f85bf394a 100644 --- a/src/lib/str.rs +++ b/src/lib/str.rs @@ -11,7 +11,7 @@ export eq, lteq, hash, is_empty, is_not_empty, is_whitespace, byte_len, index, to_chars, char_len, char_at, bytes, is_ascii, shift_byte, pop_byte, unsafe_from_byte, unsafe_from_bytes, from_char, char_range_at, str_from_cstr, sbuf, as_buf, push_byte, utf8_char_width, safe_slice, - contains; + contains, chars; native "c-stack-cdecl" mod rustrt { fn rust_str_push(&s: str, ch: u8); @@ -300,6 +300,21 @@ Pluck a character out of a string fn char_at(s: str, i: uint) -> char { ret char_range_at(s, i).ch; } /* +Function: chars + +Iterate over the characters in a string +*/ + +fn chars(s: str, it: block(char)) { + let pos = 0u, len = byte_len(s); + while (pos < len) { + let {ch, next} = char_range_at(s, pos); + pos = next; + it(ch); + } +} + +/* Function: char_len Count the number of unicode characters in a string diff --git a/src/test/stdtest/str.rs b/src/test/stdtest/str.rs index 470c8daee5e..c4923d5d2c3 100644 --- a/src/test/stdtest/str.rs +++ b/src/test/stdtest/str.rs @@ -315,3 +315,16 @@ fn contains() { assert !str::contains("abcde", "def"); assert !str::contains("", "a"); } + +#[test] +fn chars() { + let i = 0; + str::chars("x\u03c0y") {|ch| + alt i { + 0 { assert ch == 'x'; } + 1 { assert ch == '\u03c0'; } + 2 { assert ch == 'y'; } + } + i += 1; + } +} |
