atoi与itoa的实现
先说下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; }
附:把字符串转换成整数实现[何海涛]