模擬itoa和atoi
阿新 • • 發佈:2019-01-01
模擬實現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;
}