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;
    }
    

Anmelden zum Antworten