2011-10-20 13 views
0

I ...私はそれが整数、空間、整数のフォーマットに従うことを知っている等形態 「1 2 8 4 9 0」である文字列が可変長からint配列への文字列?

しかし、私はguarenteeことができません長さ私はそれが助けば、最大の長さを知っています。 私はsscanfを使うと思っていましたが、有限の整数が必要です。私は配列に "1 2 3" を有効にする方法

任意のアイデアここ

A [0] = 1

A [1] = 2

A [2] = 3

ありがとうございます!

答えて

0

それは本当に複雑ではありません。

  1. は再び文字列を超えるmalloc
  2. 反復の配列のための十分なメモリを割り当て、配列
を移入 strlen
  • で文字列の長さを計算します

    See it in action

  • +0

    もう少し拡張できますか? "1 2 23 400 2 1"のようなものはどうすれば対処できますか?それは私の頭を包み込むことができない、「弦の反復」です。 – user974703

    1

    ループで使用

    rc = sscanf(string, "%d%n", &array[i], &len); 
    

    。 rcをテストし、lenを使用して次の項目にスキップします。

    0

    多くの方法の一つは、各strtokコールの戻り値は、単一の整数をsscanfと共に使用することができる空間&としてセパレータ文字列をトークン化するstrtokを使用することができました。最大の長さを知っているので、使用する配列をsscanfで繰り返すことができます。these linesにあります。
    これが役立つことを願っています!

    2

    strtolは、文字列のどこが失敗したかを示します。
    "1 2 3 ..."のような文字列の場合は、1が読み込まれ、それ以降は失敗します。あなたがstrtolにその障害ポイント(" 2 3 ...")を渡した場合、それは2を読み、

    See it in action

    #include <ctype.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main(void) { 
        char input[] = "6 82 -7453 4 0 63 "; 
        char *err = " ", *curr = input; 
        int x, k = 0; 
        while (*curr && isspace((unsigned char)*err)) { 
        x = strtol(curr, &err, 10); 
        printf("#%d: %d\n", k++, x); 
        curr = err + !!*err; // do not advance past the '\0' 
        } 
        return 0; 
    } 
    
    ...、...、右後で失敗します - ideone初期化で上記のスニペットとは異なり、1 kは1:/であり、空白で終わる入力はうまく扱えません。

    +0

    +1、具体的なコードではおそらくより良いアプローチです。 – Jon

    +0

    +1は投稿された提案のほうが良いようです –

    関連する問題