2015-01-25 9 views
0

나는 +100+200,300+500+400,700,900과 같은 문자열을 가지고 있습니다. 나는 두 개의 서로 다른 기호를 '+'','에 의해 배열에 문자열을 분할해야, 그래서 나는 A 좀하고 싶습니다의 id = 100을하며 아이 arrayA[200, 300], B의의 id = 500 그것은 아이 arrayB[400,700,900]입니다.strtok를 사용하여 특정 문자열을 두 개의 구분 기호로 배열로 구분하는 방법

가장 좋은 방법은 무엇입니까?

감사합니다.

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

typedef struct _example_s { 
    unsigned short id; 
    unsigned short child_id[5]; 
} example_t; 

int main(void) 
{ 
    example_t ex_ary[2]; //it means A and B 

    char msg[30] = "+100+200,300+500+400,700,900"; 

    char *result = NULL; 

    result = strtok(msg, "+,"); 

    while(result != NULL) { 
     printf("%s\n", result); 
     result = strtok(NULL, "+,"); 
    } 

    return 0; 
} 
+1

당신은'strpbrk()'을 사용할 수 있지만, 2'strtok_r's를 사용해야한다고 생각합니다. –

답변

0

확인 나는 당신이 필요로하는 무슨 생각이

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

typedef struct _example_s { 
    unsigned short id; 
    unsigned short child_id[5]; 
} example_t; 

int main(void) 
{ 
    example_t ex_ary[2]; //it means A and B 
    size_t index; 
    char msg[30] = "+100+200,300+500+400,700,900"; 
    char *result = NULL; 
    char *plusSign; 

    memset(ex_ary, 0, sizeof(ex_ary)); 

    index = 0; 
    result = strtok_r(msg, "+", &plusSign); 
    while (result != NULL) 
    { 
     char *comma; 
     char *array; 
     size_t element; 

     ex_ary[index].id = strtol(result, NULL, 10); 
     result   = strtok_r(NULL, "+", &plusSign); 
     element   = 0; 
     if (result != NULL) 
     { 
      array = strtok_r(result, ",", &comma); 
      while (array != NULL) 
      { 
       ex_ary[index].child_id[element++] = strtol(array, NULL, 10); 
       array        = strtok_r(NULL, ",", &comma); 
      } 
     } 
     index += 1; 
     result = strtok_r(NULL, "+", &plusSign); 
    } 

    for (index = 0 ; index < 2 ; ++index) 
    { 
     size_t i; 

     printf("id: %d\n", ex_ary[index].id); 
     for (i = 0 ; i < 5 ; ++i) 
     { 
      printf("\t%d\n", ex_ary[index].child_id[i]); 
     } 
    } 
    return 0; 
} 

:

나는 예제 코드가 있습니다.

+0

고마워요. @iharob, 제가 필요로하는 것입니다. 그건 내가 알지 못하는 예쁜 팁이다. 나는 strtok_r을 이해하려고 노력할 것이다. – caffrey

관련 문제