Ramux05:
私は、割り当てに取り組んだし、それの一部として、私は、文字列から整数を抽出する必要があります。
私が使って試したatoi()
機能を、それは常に返し0
、そう、私はまで切り替えstrtol()
、それはまだ返します0
。
目標は、文字列から整数を抽出し、別の関数に引数として渡す方法です。私は、(いくつかのデータを更新するために、これらの値を使用する関数を使用していますupdate_stats
)。
私はC言語でのプログラミングにかなり新しいんだけど、これは私の試みであったことを覚えておいてください。
void get_number (char str[]) {
char *end;
int num;
num = strtol(str, &end, 10);
update_stats(num);
num = strtol(end, &end, 10);
update_stats(num);
}
この目的は、文字列である"e5 d8"
(例えば)I抽出物であろう5
と8
、その文字列から。
文字列の形式は常に同じです。
これどうやってするの?
言います、
strtol
いない見つける文字列の数を。それは数に変換した文字列の先頭に。(それは空白が、他には何をスキップしません。)
番号が始まる場所を見つける必要がある場合は、のようなものを使用することができます。
const char* nump = strpbrk(str, "0123456789");
if (nump == NULL) /* No number, handle error*/
あなたの番号が署名する可能性がある場合は、もう少し洗練された何かをする必要があります。一つの方法は、前の文字がある場合は、上記した後、バックアップ一文字を行うことです-
。しかし、文字列の先頭に気を付けます:
if ( nump != str && nump[-1] == '-') --nump;
ただ、パッティング-
にstrpbrk
のような入力に誤った一致を生成する引数non-numeric7
。