Splitten
-
wie kann ich einen String splitten in ansi C?
ich habe einen langen string, der durch | getrennt wurde, manchmal befindet sich das pipe (|) aber inmitten von <...>. dann soll der string an der stelle nicht gesplittet werden...
Bsp:ghlkgjhg|hlöhölkhlö|lkihlök|<abcdefgh|ijklmn>|öliphopih
so, jetzt soll der string gesplittet werden am Trennzeichen |. Nur der String "abcdefgh|ijklmn" soll nicht gesplittet werden. wie kann ich da ran gehen?
-
Suche '|' und '<'
solange '|' vor '<' ist, splitten
wenn '<' erreicht, suche nach ">|"
danach wieder von vorn bis kein '|' mehr gefunden
-
So sollte es gehen:
#include <stdio.h> char *split(char *s, char *dest, int dest_len) { int k = 0; if (*s == '\0') return NULL; while (--dest_len > 0 && *s && (*s != '|' || k != 0)) { if (*s == '<') ++k; if (*s == '>') --k; *dest++ = *s++; } *dest = 0; return (*s == '|') ? s+1 : s; } int main(void) { char *str = "ghlkgjhg|hlöhölkhlö|lkihlök|<abcdefgh|ijklmn>|öliphopih", *t, p[70]; for (t = str; ((t = split(t, p, sizeof p)) != NULL); ) printf("'%s'\n", p); return 0; }