1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
pub trait StringManipulation { fn removechar(&self, index: usize) -> String; fn substring(&self, start: usize, end: usize) -> String; fn get_length(&self) -> usize; fn get_index(&self, index: usize) -> char; fn indexes_of(&self, character: char) -> Vec<i32>; fn index_of(&self, character: char) -> usize; } impl StringManipulation for String { fn removechar(&self, index: usize) -> String { let str2: String = format!("{}{}", self.substring(0, index - 1), self.substring(index + 1, self.get_length())); str2 } fn index_of(&self, character: char) -> usize { let chars: Vec<char> = self.chars().collect(); chars.iter().position(|&find| find == character).unwrap() } fn indexes_of(&self, character: char) -> Vec<i32> { let mut v: i32 = 0; let mut vector: Vec<i32> = Vec::new(); for c in self.chars() { if character == c { vector.push(v); }; v = v + 1; }; vector } fn get_index(&self, index: usize) -> char { let chars: Vec<char> = self.chars().collect(); chars[index] } fn get_length(&self) -> usize { let chars: Vec<char> = self.chars().collect(); chars.len() } fn substring(&self, start: usize, end: usize) -> String { let mut str2: String = String::from(""); let chars: Vec<char> = self.chars().collect(); for c in start..end { str2.push(chars[c]); } str2 } }