summaryrefslogtreecommitdiff
path: root/std/string.zc
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 01:54:51 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-23 01:54:51 +0000
commit98623f2fdd63232edf0ebab1b9680cf4e33e6f10 (patch)
tree46e05b4953ea873bc5e52339a333f7911fc22867 /std/string.zc
parent8cb7089b2eb09d40d9497cea40d088d94676a8c6 (diff)
More docs, and a few improvements for the standard library
Diffstat (limited to 'std/string.zc')
-rw-r--r--std/string.zc72
1 files changed, 71 insertions, 1 deletions
diff --git a/std/string.zc b/std/string.zc
index 3f96053..a7dd6ce 100644
--- a/std/string.zc
+++ b/std/string.zc
@@ -31,7 +31,6 @@ impl String {
return String::new(s);
}
- // Fixed: 'self' implies pointer in generated C
fn c_str(self) -> char* {
return self.vec.data;
}
@@ -245,4 +244,75 @@ impl String {
return parts;
}
+
+ fn trim(self) -> String {
+ var start: usize = 0;
+ var len = self.length();
+ var end = len;
+
+ // Find start
+ while (start < len) {
+ var c = self.vec.get(start);
+ if (c != ' ' && c != '\t' && c != '\n' && c != '\r') {
+ break;
+ }
+ start = start + 1;
+ }
+
+ if (start == len) {
+ return String::new("");
+ }
+
+ // Find end
+ while (end > start) {
+ var c = self.vec.get(end - 1);
+ if (c != ' ' && c != '\t' && c != '\n' && c != '\r') {
+ break;
+ }
+ end = end - 1;
+ }
+
+ return self.substring(start, end - start);
+ }
+
+ fn replace(self, target: char*, replacement: char*) -> String {
+ var t_len = strlen(target);
+ if (t_len == 0) return self.substring(0, self.length()); // clone
+
+
+ var s_len = self.length();
+ var result = String::new("");
+
+ var i: usize = 0;
+ while (i < s_len) {
+ // Check if match
+ if (i + t_len <= s_len) {
+ var is_match = true;
+ // Manual strncmp against vec data
+ for (var k: usize = 0; k < t_len; k = k + 1) {
+ if (self.vec.get(i + k) != target[k]) {
+ is_match = false;
+ break;
+ }
+ }
+
+ if (is_match) {
+ var r_str = String::new(replacement);
+ result.append(&r_str);
+ i = i + t_len;
+ continue;
+ }
+ }
+
+ // Append single char
+ var v = Vec<char>::new();
+ v.push(self.vec.get(i));
+ v.push(0);
+ var ch_s = String::new(v.data);
+ result.append(&ch_s);
+ v.free();
+ i = i + 1;
+ }
+ return result;
+ }
} \ No newline at end of file