// 修改itoa函数(只有两个参数的版本),使得该函数可以接受三个参数。其中第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。
bool itoa(int n, char s[], const size_t digit)
{
static int revers(char *s);
enum {minus, best_minus}flag;
size_t i;
if (0 == n)
return false;
if (n < 0)
n = (0 == (n<<1))? (flag = best_minus, INT_MAX) : (flag = minus, -n); // 对负数的特殊处理
for (i = 0; n; ++i) {
s[i] = n % 10 + '0';
n /= 10;
}
if (minus == flag || best_minus == flag) //为负数添加符号
s[i++] = '-';
s[0] += flag; // 对最大负数的特殊处理
while (i < digit) //如果长度不足最小宽度,则在左端用空格填补
s[i++] = ' ';
s[i] = '\0';
revers(s);
return true;
}
static int revers(char *s)
{
char *f_ptr = s;
char *r_ptr = s + (strlen(s) - 1);
while (f_ptr < r_ptr) {
*f_ptr ^= *r_ptr;
*r_ptr ^= *f_ptr;
*f_ptr ^= *r_ptr;
++f_ptr, --r_ptr;
}
return 1;
}
阅读(440) | 评论(0) | 转发(0) |