summaryrefslogtreecommitdiff
path: root/comp/lucas-standen-NEA/code/tokenizer/util.c
diff options
context:
space:
mode:
authorstandenboy <standenboy@seacrossedlovers.xyz>2024-06-15 17:06:28 +0100
committerstandenboy <standenboy@seacrossedlovers.xyz>2024-06-15 17:06:28 +0100
commit42047fea26b14edc67b394db18ce7edb0c6399f8 (patch)
treee66ca6451ca842eae0d263aabc82435fb7987e92 /comp/lucas-standen-NEA/code/tokenizer/util.c
parentf6d4ab1521fe2427b2a43f92c4ecf163bbd889dc (diff)
parenta944e593ad7fe54d007ad44d5bf9dc7ad2ddf103 (diff)
added so much code
Diffstat (limited to 'comp/lucas-standen-NEA/code/tokenizer/util.c')
-rw-r--r--comp/lucas-standen-NEA/code/tokenizer/util.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/comp/lucas-standen-NEA/code/tokenizer/util.c b/comp/lucas-standen-NEA/code/tokenizer/util.c
index de5b6b2..46deba8 100644
--- a/comp/lucas-standen-NEA/code/tokenizer/util.c
+++ b/comp/lucas-standen-NEA/code/tokenizer/util.c
@@ -1,4 +1,5 @@
#include <stdio.h>
+#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <error.h>
@@ -6,6 +7,7 @@
void Die(); // brings down the program
void *CheckedMalloc(long size); // malloc checked
void *CheckedRealloc(void *out, long size); // realloc checked
+char **Split(char *s, char c); // splits a string into an array of strings around c
void Die(){
perror("zpy parser");
@@ -25,3 +27,39 @@ void *CheckedRealloc(void *orig, long size){
Die();
return out;
}
+
+static size_t countSegment(char const *s, char c){
+ size_t counter = 0;
+ int i = 0;
+ while (s[i]){
+ if (s[i] == c){
+ i++;
+ continue;
+ }
+ counter++;
+ while (s[i] && s[i] != c) i++;
+ }
+ return counter;
+}
+
+char **Split(char *s, char c){
+ char **strs;
+ size_t tab_counter;
+ size_t i;
+ size_t j;
+
+ if (s == NULL) return NULL;
+ tab_counter = countSegment(s, c);
+ if ((strs = (char**)CheckedMalloc(sizeof(char*) * (tab_counter + 1))) == NULL) return NULL;
+ tab_counter = 0;
+ j = -1;
+ while (s[++j]) {
+ if (s[j] == c) continue;
+ i = 0;
+ while (s[j + i] && s[j + i] != c) i++;
+ if ((strs[tab_counter++] = strndup(&s[j], i)) == NULL) return NULL;
+ j += i - 1;
+ }
+ strs[tab_counter] = NULL;
+ return strs;
+}