1

数値を含む可能性のある配列inputがあります。配列のどこに表示されるかを知っています(表示される場合)::. (将来の入力には、それぞれテキストと の後に複数の数字が含まれる場合があります:)。

input新しい配列を作成してから、トークンから始まる新しい配列にコピーし、文字を読みながら続行できます0-9atoi次に、新しい配列を呼び出します。

atoi(array, start, end)私の番号を含む配列の部分のみを変換し、copy-to-new-array ループの必要性をなくすことができれば、いくらか簡単になります。

atoi関数のそのようなオーバーロードは見られません。

C スタイルの文字列の一部のみを、自分で書く必要のない数値に変換する簡単な方法はありatoi(const char * str, int start, int end)ますか?

4

4 に答える 4

3

strtoul代わりに使用してください。開始アドレスをインデックスで調整またはオフセットするだけです。出力ポインターは、解析が終了した場所を知らせます。

于 2013-04-24T11:31:54.137 に答える
3

D.Shawleyが提案するように strtoulを使用すると、次のことができます。

コード

char* str = ":12 sdfsdf :45:18";
char* p = str;
while (*p)
{
    if (*p++ == ':')
        printf("%d\n", strtoul(p, &p, 10));
}

出力

12
45
18

コードパッドを見る

アトイバージョン

atoi ( codepad ) を使用することも可能です:

char* str = ":12 sdfsdf :45:18";
char* p = str;
while (*p)
{
    if (*p++ == ':')
        printf("%d\n", atoi(p));
}
于 2013-04-24T11:44:38.517 に答える
0

いいえ、私はそのような機能を知りません。

C にはオーバーロードもありません。

ただし、独自の atoi を作成することはそれほど難しくありません。

int atoi_se(const char * str, int start, int end) {
  char* startPtr = str+start;
  char* endPtr = str+end;
  char savedChr = *endPtr;
  *endPtr = '\0';
  int retVal = strtol(startPtr, NULL, 10);
  *endPtr = savedChr;
  return retVal;
}

注: このような機能に必要な防御コーディングはスキップしました。

于 2013-04-24T11:31:55.323 に答える
0

atoi正常に動作するはずです。(配列全体ではなくinput)開始位置を渡すだけで、できるだけ多くの桁を読み取ります。数字の後の他の文字は無視されます。

于 2013-04-24T11:32:44.577 に答える