2016-05-08 11 views
-4

Ich versuche, eine Zeichenfolge in eine Char-Array durch ein ";" zu teilen.Split-String in Array von Delemiter (Arduino)

so etwas wie folgt aus:

String a = "banana;apple;orange"; 
char *fruits = a.split(";"); 

Was benötige ich, dass für Acheiving zu tun?

+2

Ist das für Java oder C? – CConard96

+0

@ CConard96 Vielleicht auch nicht ... – MikeCAT

+0

Zu viele Sprach-Tags - ich fühle mich verpflichtet, zu schließen, um es zu weit zu schließen. –

Antwort

0

Wir können eine Zeichenfolge in C mit strtok() mit einem spezifischen Trennzeichen (";") aufteilen. strtok() verbraucht die Zeichenfolge, so dass wir eine Kopie erstellen müssen. Wenn die ursprüngliche Zeichenfolge an anderer Stelle erforderlich ist, verwenden Sie die Kopie der Zeichenfolge anstelle des Originals.

#include <assert.h> 
#include <stddef.h> 
#include <memory.h> 
#include <stdlib.h> 
#include <stdio.h> 

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <assert.h> 

char** str_split(char* a_str, const char a_delim) 
{ 
    char** result = 0; 
    size_t count  = 0; 
    char* tmp  = a_str; 
    char* last_comma = 0; 
    char delim[2]; 
    delim[0] = a_delim; 
    delim[1] = 0; 

    /* Count how many elements will be extracted. */ 
    while (*tmp) 
    { 
     if (a_delim == *tmp) 
     { 
      count++; 
      last_comma = tmp; 
     } 
     tmp++; 
    } 

    /* Add space for trailing token. */ 
    count += last_comma < (a_str + strlen(a_str) - 1); 

    /* Add space for terminating null string so caller 
     knows where the list of returned strings ends. */ 
    count++; 

    result = malloc(sizeof(char*) * count); 

    if (result) 
    { 
     size_t idx = 0; 
     char* token = strtok(a_str, delim); 

     while (token) 
     { 
      assert(idx < count); 
      *(result + idx++) = strdup(token); 
      token = strtok(0, delim); 
     } 
     assert(idx == count - 1); 
     *(result + idx) = 0; 
    } 

    return result; 
} 

int main() 
{ 

    char** tokens; 
    char months[] = "banana;apple;orange"; 

    printf("fruits=[%s]\n\n", months); 

    tokens = str_split(months, ';'); 

    if (tokens) 
    { 
     int i; 
     for (i = 0; *(tokens + i); i++) 
     { 
      printf("fruits=[%s]\n", *(tokens + i)); 
      free(*(tokens + i)); 
     } 
     printf("\n"); 
     free(tokens); 
    } 

    return 0; 
} 

-Test

splitstr 
fruits=[banana;apple;orange] 

fruits=[banana] 
fruits=[apple] 
fruits=[orange] 

Process finished with exit code 0