string_manipulation/
lib.rs

1pub 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}