void itoa(int i, char *string) {
int power=0,j=0;
j=i;
for( power=1;j>10;j/=10) power*=10;
for(;power>0;power/=10) {
*string++='0'+i/power; i%=power; }
*string='\\0';
printf(\"%s\\n\}
void main()
{
char string[20]; itoa(12345, string); printf(\"%s\\n\}
其中power相当于类似于1234,其power=1000;134,其power=100 *string++='0'+i/power;//获得取得字符的asicii码 i/power取得字符,例如1234/1000=1;234/100=2
2、atoi实现
[cpp] view plaincopyprint? int atoi(char *str) {
if(!str)
return -1;
bool bMinus=false; int result=0;
if(('0'>*str || *str>'9')&&(*str=='+'||*str=='-')) {
if(*str=='-') bMinus=true; *str++; }
while( *str != '\\0') {
if('0'> *str || *str>'9') break; else
result = result*10+(*str++ - '0'); }
if (*str != '\\0')//no-normal end return -2;
return bMinus?-result:result; }
int atoi(char *str) {
if(!str)
return -1; bool bMinus=false; int result=0;
if(('0'>*str || *str>'9')&&(*str=='+'||*str=='-')) {
if(*str=='-') bMinus=true; *str++; }
while( *str != '\\0') {
if('0'> *str || *str>'9') break; else
result = result*10+(*str++ - '0'); }
if (*str != '\\0')//no-normal end return -2;
return bMinus?-result:result; }
重写的atoi函数,没有考虑溢出的情况。
if(('0'>*str || *str>'9')&&(*str=='+'||*str=='-'))//判读第一个字符是否为数字的正负号
if (*str != '\\0')//no-normal end,当上文的while循环不正常退出,应视为字符串不合法,例如“+1234abc”
测试:
[cpp] view plaincopyprint? char *c1 = \"12345\";
char *c2 = \"-12345\"; char *c3 = \"bat-123\"; char *c4 = \"+123abc\";
printf(\"c1=%d\\n\ printf(\"c2=%d\\n\ printf(\"c3=%d\\n\ printf(\"c4=%d\\n\char *c1 = \"12345\";
char *c2 = \"-12345\"; char *c3 = \"bat-123\"; char *c4 = \"+123abc\";
printf(\"c1=%d\\n\ printf(\"c2=%d\\n\
printf(\"c3=%d\\n\ printf(\"c4=%d\\n\
输出结果为: c1=12345 c2=-12345 c3=-2 c4=-2