atoi関数での10倍していく処理
K&R本 2.7
atoi関数のサンプルがあった
int atoi(char s[]){ int i, n; n = 0; for(i = 0; s[i] >= '\0' && s[i] <= '9'; ++i ) { n = 10 * n + (s[i] - '0'); } }
このnの一行が素晴らしい。
僕がatoi関数を自作した時はこうなっていた。
while(*str != '\0'){ // 0〜9以外の文字列ならそこで終了 if ( *str < 48 || *str > 57 ) { break; } num += *str - 48; num *= 10; str++; } num /= 10;atoi関数を自作してみる - (void*)Pないと
一部抜粋。
このようにループ内では基本的に10倍していき、ループを抜けた時点で10で割るという面倒くさいことをしていた。
サンプルでは「10 * n」とすることで一回目の10倍を無視している(n = 0なので)
ラーニングしました。