2017-10-23 60 views
1

インデックスと値で構成された無限の数の文字列がセミコロンで区切られています。各インデックスは、その値からコンマで区切られています。C言語でchar配列をint型2d配列に変換する

例:

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

( "index1の、VALUE1; INDEX2、値2; ...")私はこのように、2Dの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