您的位置:首页 > 其它

算法16:实现itoa和atoi

2017-03-21 10:16 323 查看

atoi 代码实现

//str:源字符串
//return:返回整数
int atoi(const char* str)
{
assert(str != NULL);

//符号:0为正数,1为负数
int sign = 0;
int result = 0;

//去掉空格,制表符和换行符
while(*str == ' '|| *str == '\t' || *str == '\n')
{
++str;
}
//判断正负数
if(*str == '-')
{
sign = 1;
++str;
}
else if(*str == '+')
{
++str;
}

while(*str >= '0' && *str <= '9')
{
result = 10*result + *str - '0';
++str;
}

if(sign == 1)
{
result = 0 - result;
}

return result;
}


itoa代码实现

//num: 欲转换的数字
//dst: 转换后的字符串
//radix:转换后的进制数
char* itoa(int num,char* dst,int radix)
{
//指针指向目标字符串
char* p = dst;
//无符号数字
unsigned digval;
//调转字符串参数
char* firstDig = dst;
//调转字符串临时便令
char temp;

if(num < 0)
{
*p++ = '-';
firstDig++;
num = 0 - num;
}

while(num > 0)
{
digval = num%radix;
num = num/radix;

if(digval > 9)
{
*p++ = (char)(digval - 10 + 'a');
}
else
{
*p++ = (char)digval + '0';
}
}

*p-- = '\0';

//倒转字符串
while(firstDig < p)
{
temp = *firstDig;
*firstDig = *p;
*p = temp;

firstDig++;
p--;
}

return dst;
}


测试代码

int _tmain(int argc, _TCHAR* argv[])
{
char str[10] = "-123434";
int num = atoi(str);

cout<<"-123434 num is "<<num<<endl;

char dstStr[50] = {0};
cout<<"-123434 radix = 10 :"<<itoa(num,dstStr,10)<<endl;
cout<<"-123434 radix = 8 :"<<itoa(num,dstStr,8)<<endl;
cout<<"-123434 radix = 16 :"<<itoa(num,dstStr,16)<<endl;
cout<<"-123434 radix = 2 :"<<itoa(num,dstStr,2)<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法