string_manipulation/
lib.rs1pub trait StringManipulation {
2 fn remove_index(&self, index: usize) -> String;
3 fn substring(&self, start: usize, end: usize) -> String;
4 fn get_length(&self) -> usize;
5 fn get_index(&self, index: usize) -> char;
6 fn indexes_of(&self, character: char) -> Vec<i32>;
7 fn index_of(&self, character: char) -> usize;
8 fn split_at_index(&self, index: usize) -> Vec<String>;
9 fn chop(&self, start: usize, end: usize) -> String;
10 fn insert_str(&self, strh: String, index: usize) -> String;
11 fn reverse_str(&self) -> String;
12}
13impl StringManipulation for String {
14 fn remove_index(&self, index: usize) -> String {
15 let str2: String = format!("{}{}", self.substring(0, index - 1), self.substring(index + 1, self.get_length()));
16 str2
17 }
18 fn index_of(&self, character: char) -> usize {
19 let chars: Vec<char> = self.chars().collect();
20 chars.iter().position(|&find| find == character).unwrap()
21 }
22 fn indexes_of(&self, character: char) -> Vec<i32> {
23 let mut v: i32 = 0;
24 let mut vector: Vec<i32> = Vec::new();
25 for c in self.chars() {
26 if character == c {
27 vector.push(v);
28 };
29 v = v + 1;
30 };
31 vector
32 }
33 fn get_index(&self, index: usize) -> char {
34 let chars: Vec<char> = self.chars().collect();
35 chars[index]
36 }
37 fn get_length(&self) -> usize {
38 let chars: Vec<char> = self.chars().collect();
39 chars.len()
40 }
41 fn substring(&self, start: usize, end: usize) -> String {
42 let mut str2: String = String::from("");
43 let chars: Vec<char> = self.chars().collect();
44 for c in start..end {
45 str2.push(chars[c]);
46 }
47 str2
48 }
49 fn split_at_index(&self, index: usize) -> Vec<String> {
50 let mut vector: Vec<String> = Vec::new();
51 vector[0] = String::from("");
52 vector[1] = String::from("");
53 let chars: Vec<char> = self.chars().collect();
54 let length: usize = chars.len();
55 for c in 0..index {
56 vector[0].push(chars[c]);
57 }
58 for c in index..length {
59 vector[1].push(chars[c]);
60 }
61 vector
62 }
63 fn chop(&self, mut start: usize, end: usize) -> String {
64 let chars: Vec<char> = self.chars().collect();
65 let length: usize = chars.len();
66 start = start + 1;
67 let mut str = String::from("");
68 for c in 0..start {
69 str.push(chars[c]);
70 }
71 for c in end..length {
72 str.push(chars[c]);
73 }
74 str
75 }
76 fn insert_str(&self, strh: String, index: usize) -> String {
77 let chars: Vec<char> = self.chars().collect();
78 let length: usize = chars.len();
79 let mut str2 = String::from("");
80 for c in 0..index {
81 str2.push(chars[c]);
82 };
83 str2 = format!("{}{}", str2, strh).to_string();
84 for c in index..length {
85 str2.push(chars[c]);
86 };
87 str2
88 }
89 fn reverse_str(&self) -> String {
90 let length = self.get_length();
91 let chars: Vec<char> = self.chars().collect();
92 let iterator = (0..length).rev();
93 let mut strh: String = String::from("");
94 for c in iterator {
95 strh.push(chars[c]);
96 }
97 strh
98 }
99}