summaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/splitstr.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/examples/splitstr.c b/examples/splitstr.c
new file mode 100644
index 00000000..67499d0f
--- /dev/null
+++ b/examples/splitstr.c
@@ -0,0 +1,39 @@
+#include <stc/csview.h>
+#include <stc/cvec.h>
+
+void print_split(csview str, csview sep)
+{
+ csview token = csview_first_token(str, sep);
+ for (;;) {
+ // print non-null-terminated csview
+ printf("\t\"%.*s\"\n", csview_arg(token));
+ if (csview_end(&token).ref == csview_end(&str).ref) break;
+ token = csview_next_token(str, sep, token);
+ }
+}
+
+using_cvec_str();
+
+cvec_str string_split(csview str, csview sep)
+{
+ cvec_str vec = cvec_str_init();
+ csview token = csview_first_token(str, sep);
+ for (;;) {
+ cvec_str_push_back(&vec, cstr_from_v(token));
+ if (csview_end(&token).ref == csview_end(&str).ref) break;
+ token = csview_next_token(str, sep, token);
+ }
+ return vec;
+}
+
+int main()
+{
+ puts("Output from print_split():");
+ print_split(c_lit("//This is a//double-slash//separated//string"), c_lit("//")); puts("");
+ print_split(c_lit("This has no matching separator"), c_lit("xx")); puts("");
+
+ puts("Output from string_split():");
+ c_forvar (cvec_str v = string_split(c_lit("Split,this,,string,now,"), c_lit(",")), cvec_str_del(&v))
+ c_foreach (i, cvec_str, v)
+ printf("\t\"%s\"\n", i.ref->str);
+} \ No newline at end of file