模拟实现atoi
函数原型:
int atoi ( const char * str );
传入一个char*,返回值为int
int my_atoi(const char* str)
{
assert(str);
int num = 0;
int flag = 1;
//跳过空白字符
while (*str == ' ' || *str == '\t' || *str == '\n')
str++;
//判断转换后数字的正负
flag = (*str == '-') ? -1 : 1;
//如果有输入符号,则要将此符号跳过
if (*str == '-' || *str == '+')
str++;
//每一位数字转为数字
while (*str >= '0' && *str <= '9')
{
num = num * 10 + (*str - '0');
str++;
}
return num*flag;
}
模拟实现itoa
函数原型:
char* itoa(int value,char* str,int radix)
int转为char*。
value为int的值。
str为最后字符串保存的地方。
radix为转为X进制的字符。
char* my_itoa(int value,char* str,int radix)
{
char* firstdig;
char* p = str;
unsigned int digval;
if (value < 0)
{
*p++ = '-';
value = -value;
}
firstdig = p;
//这时存到p中(也就是str)的数字为反的
do
{
//数字一定是无符号整型,并且数字为对进制位取得余数。
digval = value%radix;
value /= radix;
if (digval > 9)
*p = (char)(digval - 10 + 'a');
else
*p = (char)(digval + '0');
p++;
} while (value>0);
//这里需要翻转一下
//先把末尾置为\0结束符
*p-- = '\0';
while (firstdig < p)
{
char temp = *p;
*p = *firstdig;
*firstdig = temp;
firstdig++;
p--;
}
return str;
}