2

「12 23 34」のようなスペースで区切られた数字で構成される入力文字列があります。
出力は整数の配列でなければなりません。

私は次のことを試しました:

while (sscanf(s, "%d", &d) == 1) {
    arr[n++] = d;
}

しかし、(オフセットが自動的に調整される) ファイルから読み取っていないため、毎回
同じ数値を格納し続けることがわかりました。d

それから私はこれを試しました:

while (sscanf(s, "%d", &d) == 1) {
    arr[n++] = d;
    s = strchr(s, ' ');
}

s手動で新しい番号にシフトします。
私はうまくいくはずだと信じています。なぜ失敗するのか、私にはまったくわかりません。

4

2 に答える 2

2

2 番目のトリックは、わずかな変更で実際に機能するはずです。何を変更する必要があるかについては、コード内のコメントを参照してください。

while (sscanf(s, "%d", &d) == 1) {
    arr[n++] = d;
    s = strchr(s, ' ');
    // strchr returns NULL on failures. If there's no further space, break
    if (!s) break;
    // Advance one past the space that you detected, otherwise
    // the code will be finding the same space over and over again.
    s++;
}

数値のシーケンスをトークン化するためのより良い方法はstrtol、次の整数を読み取った後にポインターを進めるのに役立つ です。

while (*s) {
    arr[n++] = strtol(s, &s, 10);
}
于 2013-05-28T21:40:44.050 に答える