2017-10-23 2 views
1

인덱스와 값으로 구성된 무한 개수의 문자 배열이 세미콜론으로 구분되어 있습니다. 각 색인은 값과 쉼표로 구분됩니다.C 언어로 char 배열을 정수형 2d 배열로 변환합니다.

예 :

char srt[50] = "1,3; 2,4; 0,-2; 3,11"; 

("index1의, 값 1, index2 1, 값 2, ...") 나는 다음과 같이 2 차원의 int 배열에 char 배열을 변환 할

:

int num[4][2] = {{1,3}, {2,4}, {0,-2}, {3,11}}; 

어떻게?

+2

이 문자열을 구문 분석해야합니다. 쉬운 방법은 없습니다. –

+0

코드에 오버플로가 있습니다. 그것을'str [21]로 만드십시오. – Raindrop7

+0

'strtok_r' 또는'strtok'과'strchr'을 사용하십시오. 그런 다음'strtol'을 사용하십시오. – BLUEPIXY

답변

1

숙제하는 동안 downvoted하지 않기를 바래요.하지만 방금 뭔가 코딩 할 시간을 찾았습니다. 접근법은 적절한 배열을 예약하기 위해 가능한 쌍의 수 (세미콜론의 수 + 1)를 먼저 계산하는 것입니다. 그런 다음 strtok 루프를 사용하여 쌍을 분리하고 sscanf(str, "%d,%d",..)에 값을 읽으십시오. 실제 쌍 수는 페어를 분석 할 때 실패로 인해 최대 쌍 수와 다를 수 있습니다.

int main() 
{ 
    char srt[50] = "1,3; 2,4; 0,-2; 3,11"; 

    char* p=srt; 
    size_t pairsCount = 1; 
    while (*p) { 
     if (*p++ == ';') 
      pairsCount++; 
    } 

    int pairs[pairsCount][2]; 

    p = strtok(srt, ";"); 
    pairsCount = 0; 
    while (p) { 
     int key = 0, value = 0; 
     if (sscanf(p, "%d,%d", &key, &value) == 2) { 
      pairs[pairsCount][0] = key; 
      pairs[pairsCount][1] = value; 
      pairsCount++; 
     } 
     p = strtok(NULL, ";"); 
    } 

    for (int i=0; i<pairsCount; i++) { 
     printf("%d,%d\n", pairs[i][0], pairs[i][1]); 
    } 

    return 0; 
} 
+1

진정한 2D 배열'int pairs [pairsCount] [2];'! (나는'size_t pairsCount = 1;'을 사용했고,''% d, % d "'에 공백을 넣었을 것이다. 그러나 그것들은 사소하다.). – chux