我自己写的C函数atoi,itoa的一个实现,代码如下:
//
返回值 -1表示出错
// 参数num引用返回转换后的整数
int atoi( int & num, const char * s)
... {
if( s == NULL)
return -1;
const char * p = s;
while (*p == ' ')
...{
++p;
}
int bits = 0;
bool nagetive = false;
if( *p == '-' )
...{
nagetive = true;
++p;
}
const char * pBegin = p;
int endSpace = 0;
int endBit = -1;
while (*p != NULL)
...{
if( *p == '.' )
...{
if( endBit > -1 )
return -1;
endBit = bits++;
++p;
continue;
}
bool endSpace = false;
while( *p != NULL && (char)*p == ' ' )
...{
++p;
endSpace = true;
}
if( endSpace )
...{
if( *p == NULL )
break;
return -1;
}
if( (char)*p < '0' || (char)*p > '9' )
return -1;
bits++;
p++;
}
bits = endBit == -1 ? bits : endBit;
int sum = 0;
for(int i = 0; i < bits; ++i)
...{
sum = sum * 10 + pBegin[i] - (char)'0';
}
num = sum;
if( nagetive )
num = -num;
return 0;
}
// 返回值为转换后的C字符串,使用完以后需要调用delete []
char * itoa( int num)
... {
if( num == 0 )
...{
char * pChr = new char[2];
*pChr++ = '0';
*pChr = 0;
return pChr;
}
bool negitive = false;
if( num < 0 )
...{
negitive = true;
num = -num;
}
char * p = new char[12];
p[11] = 0;
int temp = num;
int t = 0;
int index = 10;
while( (temp/10) >= 1 )
...{
t = temp % 10;
temp = temp/10;
p[index--] = (char)(t + (char)'0');
}
p[index] = (char)(temp + (char)'0');
int size = 11 - index + 1;
if( negitive )
size++;
char *val = new char[size];
val[size - 1] = 0;
int i = 0;
if( negitive )
...{
val[i++] = '-';
}
while( i < size)
...{
val[i++] = p[index++];
}
delete [] p;
return val;
}
// 参数num引用返回转换后的整数
int atoi( int & num, const char * s)
... {
if( s == NULL)
return -1;
const char * p = s;
while (*p == ' ')
...{
++p;
}
int bits = 0;
bool nagetive = false;
if( *p == '-' )
...{
nagetive = true;
++p;
}
const char * pBegin = p;
int endSpace = 0;
int endBit = -1;
while (*p != NULL)
...{
if( *p == '.' )
...{
if( endBit > -1 )
return -1;
endBit = bits++;
++p;
continue;
}
bool endSpace = false;
while( *p != NULL && (char)*p == ' ' )
...{
++p;
endSpace = true;
}
if( endSpace )
...{
if( *p == NULL )
break;
return -1;
}
if( (char)*p < '0' || (char)*p > '9' )
return -1;
bits++;
p++;
}
bits = endBit == -1 ? bits : endBit;
int sum = 0;
for(int i = 0; i < bits; ++i)
...{
sum = sum * 10 + pBegin[i] - (char)'0';
}
num = sum;
if( nagetive )
num = -num;
return 0;
}
// 返回值为转换后的C字符串,使用完以后需要调用delete []
char * itoa( int num)
... {
if( num == 0 )
...{
char * pChr = new char[2];
*pChr++ = '0';
*pChr = 0;
return pChr;
}
bool negitive = false;
if( num < 0 )
...{
negitive = true;
num = -num;
}
char * p = new char[12];
p[11] = 0;
int temp = num;
int t = 0;
int index = 10;
while( (temp/10) >= 1 )
...{
t = temp % 10;
temp = temp/10;
p[index--] = (char)(t + (char)'0');
}
p[index] = (char)(temp + (char)'0');
int size = 11 - index + 1;
if( negitive )
size++;
char *val = new char[size];
val[size - 1] = 0;
int i = 0;
if( negitive )
...{
val[i++] = '-';
}
while( i < size)
...{
val[i++] = p[index++];
}
delete [] p;
return val;
}