for (a = str; * a; a++) ...
a
これは、逆参照a
が暗黙的に false に変換されa
、各ステップでインクリメントされるまで、文字列の先頭でポインターを開始することによって機能します。
基本的に、文字列の末尾にある NUL ターミネータ ( \0
) に到達するまで配列をウォークします。これは、NUL ターミネータが暗黙的に false に変換されるためです。他の文字はそうではありません。
上記の方法を使用して、最後の整数 (2000) が異なる可能性があることを知って、それを解析して文字列の最後の整数 (2000) を取得するにはどうすればよいでしょうか。
の前の最後のスペースを探し\0
、関数を呼び出して残りの文字を整数に変換する必要があります。を参照してくださいstrtol
。
次のアプローチを検討してください。
- 文字列の末尾を見つける (そのループを使用)
- 後方にスペースを検索します。
- それを使って を呼び出します
strtol
。
-
for (a = str; *a; a++); // Find the end.
while (*a != ' ') a--; // Move back to the space.
a++; // Move one past the space.
int result = strtol(a, NULL, 10);
または、最後のトークンの開始を追跡するだけです。
const char* start = str;
for (a = str; *a; a++) { // Until you hit the end of the string.
if (*a == ' ') start = a; // New token, reassign start.
}
int result = strtol(start, NULL, 10);
このバージョンには、文字列にスペースを必要としないという利点があります。