summaryrefslogtreecommitdiffstats
path: root/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs')
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs
new file mode 100644
index 000000000..5a6ceaa1e
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs
@@ -0,0 +1,36 @@
+// ANCHOR: here
+fn first_word(s: &str) -> &str {
+ // ANCHOR_END: here
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+
+// ANCHOR: usage
+fn main() {
+ let my_string = String::from("hello world");
+
+ // `first_word` works on slices of `String`s, whether partial or whole
+ let word = first_word(&my_string[0..6]);
+ let word = first_word(&my_string[..]);
+ // `first_word` also works on references to `String`s, which are equivalent
+ // to whole slices of `String`s
+ let word = first_word(&my_string);
+
+ let my_string_literal = "hello world";
+
+ // `first_word` works on slices of string literals, whether partial or whole
+ let word = first_word(&my_string_literal[0..6]);
+ let word = first_word(&my_string_literal[..]);
+
+ // Because string literals *are* string slices already,
+ // this works too, without the slice syntax!
+ let word = first_word(my_string_literal);
+}
+// ANCHOR_END: usage