Browse Source

source code of slice function

pull/1/head
jingxun 3 years ago
parent
commit
0a5403352a
  1. 72
      day03/src/main.rs

72
day03/src/main.rs

@ -0,0 +1,72 @@
fn main() {
let mut s = String::from("hello world");
let word = first_word(&s);
let first_word = get_first_word(&s);
let re_firstw = re_first_word(&s);
let sec_word = second_word(&s);
let s1 = "hello world";
let word_value = slice_first(s1);
println!("{}", word);
println!("{}", first_word);
println!("{}", re_firstw);
println!("{}", sec_word);
println!("{}", word_value);
s.clear();
}
fn first_word(s: &String) -> usize {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return i;
}
}
s.len()
}
fn get_first_word(s: &String) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[..i];
}
}
return s;
}
fn re_first_word(s: &String) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[..i];
}
}
&s[..]
}
fn second_word(s: &String) -> &str {
let bytes = s.as_bytes();
let mut begin: usize = 0;
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' || item == s[s.len() - 1..].as_bytes()[0] {
if begin == 0 {
begin = i + 1;
continue;
} else {
let end = if item == b' ' { i } else { i + 1 };
return &s[begin..end];
}
}
}
&s[..]
}
fn slice_first(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[..i];
}
}
&s[..]
}
Loading…
Cancel
Save