diff options
author | standenboy <standenboy@seacrossedlovers.xyz> | 2024-06-15 17:06:28 +0100 |
---|---|---|
committer | standenboy <standenboy@seacrossedlovers.xyz> | 2024-06-15 17:06:28 +0100 |
commit | 42047fea26b14edc67b394db18ce7edb0c6399f8 (patch) | |
tree | e66ca6451ca842eae0d263aabc82435fb7987e92 /comp/lucas-standen-NEA/code/tokenizer/util.c | |
parent | f6d4ab1521fe2427b2a43f92c4ecf163bbd889dc (diff) | |
parent | a944e593ad7fe54d007ad44d5bf9dc7ad2ddf103 (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.c | 38 |
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; +} |