题目
修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。
题目分析
先进行抓换,然后判断字符串长度是否小于最小宽度。
代码实现
#include <stdio.h>
#include <string.h>
void reverse(char s[])
{
int c, i, j;
for (i = 0, j = strlen(s)-1; i < j; i++, j--)
{
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itoa(int n, char s[], int j)
{
int i, lengths, sign;
char s2[20];
unsigned m;
if ((sign = n) < 0)
m = -n;
i = 0;
do
{
s[i++] = m % 10 + '0';
}
while ((m /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
if ((lengths = strlen(s)) < j)
{
i = 0;
lengths = j - lengths;
while (s[i] != '\0')
{
s2[i+lengths] = s[i];
i++;
}
s2[i+lengths] = '\0';
i = 0;
do
{
s2[i++] = ' ';
lengths--;
}
while (lengths > 0);
}
i = 0;
while (s2[i] != '\0')
{
s[i] = s2[i];
i++;
}
s[i] = '\0';
}
int main()
{
int i, n, x;
char s1[20];
i = -2147483648;
x = 16;
itoa(i, s1, x);
n = 0;
while (s1[n] != '\0')
printf("%c", s1[n++]);
return 0;
}