itoa 改良版-20110227
itoa 改良版-20110223 - Shammerismで言及していた負の数の処理とかをなるべく同じところにまとめたりしてみた。自分でできる範囲で可能な限りコードをスッキリさせたというところだろうか。
char * itoa(int x){ char * value; // int max is 2147483647, this is 10 digit. int i, j, digit, result; int rest = abs(x); // Check number of digit for( i = 10 ; 0 <= i ; i-- ){ digit = 1; for( j = i ; j != 0 ; j-- ){ digit = 10 * digit; } if( (rest / digit) != 0 ){ if( x < 0 ){ i = i + 1; // for minus value = (char *)calloc((i + 1), sizeof(char));// 1 means '\0' value[0] = '-'; } else { value = (char *)calloc((i + 1), sizeof(char));// 1 means '\0' } *(value + i) = '\0'; break; } } for( ; 0 <= i && *(value + i) != '-'; i-- ){ // 1. calc the rightmost number // 2. fill in the step 1 result // 3. decrease the rest value digit result = rest % 10; switch (result) { case 0: *(value + i) = '0'; break; case 1: *(value + i) = '1'; break; case 2: *(value + i) = '2'; break; case 3: *(value + i) = '3'; break; case 4: *(value + i) = '4'; break; case 5: *(value + i) = '5'; break; case 6: *(value + i) = '6'; break; case 7: *(value + i) = '7'; break; case 8: *(value + i) = '8'; break; case 9: *(value + i) = '9'; break; default: // Do nothing break; } rest = (rest - result) / 10; } return value; }
もう不具合が出ませんように。