2016-05-08 6 views
-4

文字列を ";"で文字配列に分割しようとしています。削除文字列を配列に分割する(Arduino)

ので、このような何か:

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

私はそれをacheivingのために行うには何が必要ですか?

+2

JavaやCのために、このですか? – CConard96

+0

@ CConard96多分どちらも... – MikeCAT

+0

言語タグが多すぎます - 私はあまりにも幅が広いために投票を義務付けています。 –

答えて

0

strtok()で文字列をCで分割することができます。具体的な区切り文字は ";"です。 strtok()は文字列を消費するため、コピーを作成する必要があります。元の文字列が他の場所で必要な場合は、元の文字列の代わりに文字列のコピーを使用します。

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

テスト

splitstr 
fruits=[banana;apple;orange] 

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

Process finished with exit code 0 
関連する問題