I ...私はそれが整数、空間、整数のフォーマットに従うことを知っている等形態 「1 2 8 4 9 0」である文字列が可変長からint配列への文字列?
しかし、私はguarenteeことができません長さ私はそれが助けば、最大の長さを知っています。 私はsscanfを使うと思っていましたが、有限の整数が必要です。私は配列に "1 2 3" を有効にする方法
任意のアイデアここ
A [0] = 1
A [1] = 2
A [2] = 3
ありがとうございます!
I ...私はそれが整数、空間、整数のフォーマットに従うことを知っている等形態 「1 2 8 4 9 0」である文字列が可変長からint配列への文字列?
しかし、私はguarenteeことができません長さ私はそれが助けば、最大の長さを知っています。 私はsscanfを使うと思っていましたが、有限の整数が必要です。私は配列に "1 2 3" を有効にする方法
任意のアイデアここ
A [0] = 1
A [1] = 2
A [2] = 3
ありがとうございます!
それは本当に複雑ではありません。
malloc
strlen
ループで使用
rc = sscanf(string, "%d%n", &array[i], &len);
。 rcをテストし、lenを使用して次の項目にスキップします。
多くの方法の一つは、各strtok
コールの戻り値は、単一の整数をsscanf
と共に使用することができる空間&としてセパレータ文字列をトークン化するstrtok
を使用することができました。最大の長さを知っているので、使用する配列をsscanf
で繰り返すことができます。these linesにあります。
これが役立つことを願っています!
strtol
は、文字列のどこが失敗したかを示します。
"1 2 3 ..."
のような文字列の場合は、1
が読み込まれ、それ以降は失敗します。あなたがstrtol
にその障害ポイント(" 2 3 ..."
)を渡した場合、それは2
を読み、
#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:/であり、空白で終わる入力はうまく扱えません。
+1、具体的なコードではおそらくより良いアプローチです。 – Jon
+1は投稿された提案のほうが良いようです –
もう少し拡張できますか? "1 2 23 400 2 1"のようなものはどうすれば対処できますか?それは私の頭を包み込むことができない、「弦の反復」です。 – user974703