您的位置:首页 > 其它

atoi与itoa的实现

2012-07-03 12:12 225 查看
先说下itoa,将数字转换成字符串。利用了在一个数后面加‘0’即可将之转换成char型,这样将每个数字转换成char后即成为一个逆序的字符数组,再逆序下即可。

atoi即将char-'0'即得整数。

代码中需要注意的地方:

1.函数名:可以设想有atoi有返回值来标识是否成功转换

//参数要为const
bool atoi(const char* pStr,int &nValue)


2.atoi中对于无法转换成数字的字符的判断,方式如下:

if(pStr[i] >= '0' && pStr[i] <= '9')
{
//转换
}
else
{
return false;
}


3.atoi中溢出的判断:

if(nValue > std::numeric_limits<int>::max())
{
return false;
}


4.可以考虑将转化的数字类型设大点,如long long

自己实现:

void itoaMyself(int number,char str[])
{
bool bNagetive = false;
if(number<0)
{
bNagetive = true;
number = 0-number;
}

int i=0;
char tmp[12];
//将数字转换成char
while(number)
{
tmp[i] = number%10 + '0';
i++;
number=number/10;
}
if(bNagetive)
{
tmp[i++] = '-';
}
tmp[i] = '\0';

i--;

//cout<<"tmp[]为:"<<tmp<<endl;

int j=0;
//逆置的char转换成正序的字符串
while (i>=0);
{
str[j++]=tmp[i--];
}

str[j] = '\0';
}


bool atoiMyself(char* str,int &number)
{
int i=0,j=0;
bool bNagetive = false;
if(!str) return false;

char tmp[12];
//空格或制表符
while(str[i]==' ' || str[i]=='/t')
{
i++;
}

if(str[i]=='-')
{
bNagetive=true;
i++;
}

//cout<<"str[]:"<<str<<endl;

int sum=0;
while(str[i])
{
//if(IsNumber(str[i]-'0')) return false;
sum    = str[i]-'0'+sum*10;
i++;
}
if(bNagetive) sum=-sum;
number=sum;
return true;
}

附:把字符串转换成整数实现[何海涛]


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