由于有些设备平台出于某些目的,不提供c函数库中的字符串转整型函数。为此,本文在这里提供一些"轮子"。
atoi()函数实现int isDigit(char c)
{
return (c >= '0') && (c <= '9');
}
int myAtoi(char *str)
{
int result = 0;
int neg_multiplier = 1;
// Scrub leading whitespace
while (*str && (
(*str == ' ') ||
(*str == 't')))
str++;
// Check for negative
if (*str && *str == '-') {
neg_multiplier = -1;
str++;
}
// Do number
for (; *str && isDigit(*str); str++) {
result = (result * 10) + (*str - '0');
}
return result * neg_multiplier;
}
itoa()函数实现
#includeatof()函数实现#include char *itoarl(int64_t num, char *dest, int destlen) { char buf[60]; int neg = num < 0; int bufind = 0; int i; if (neg) { num *= -1; } // Now, scrub off the digits while (num > 0) { int digit = num%10; buf[bufind++] = '0'+digit; num /= 10; } if (neg) { buf[bufind++] = '-'; } buf[bufind]=' '; if (bufind > destlen) { return (char*)0; } // Now we have it reversed -- reverse it back into the dest. dest[bufind]=buf[bufind]; bufind--; for (i=0; bufind >= 0; i++, bufind--) { dest[bufind] = buf[i]; } return dest; } int64_t Pow(num, exp) { int64_t result = 1; for (; exp > 0; exp--) { result *= num; } return result; } char *itoalr(int64_t num, char *dest, int destlen) { int neg = num < 0; int bufind = 0; if (neg) { num *= -1; dest[bufind++]='-'; } // How many digits are in the string? float fnumDigits = log10(num); int numDigits = (int)fnumDigits; if ((float)numDigits != fnumDigits) numDigits ++; //printf("Num: %lld Digits: %d (fDigits): %fn", num, numDigits, fnumDigits); // Now walk through for (int exp = numDigits -1; exp >= 0; exp--) { int64_t mask = Pow(10, exp); int digit = num / mask; int64_t sub = digit * mask; num -= sub; dest[bufind++] = '0'+digit; } dest[bufind]=' '; return dest; } char *itoa(int64_t num, char *dest, int destlen) { return itoarl(num, dest, destlen); }
static int is_digit(char ch)
{
if(ch>='0'&&ch<='9')
return 1;
else
return 0;
}
static int is_space(char ch)
{
if(ch==' ')
return 1;
else
return 0;
}
static double _atof(char *s)
{
double power,value;
int i,sign;
for(i=0;is_space(s[i]);i++);//除去字符串前的空格
sign=(s[i]=='-')?-1:1;
if(s[i]=='-'||s[i]=='+')//要是有符号位就前进一位
i++;
for(value=0.0;is_digit(s[i]);i++)//计算小数点钱的数字
value=value*10.0+(s[i]-'0');
if(s[i]=='.')
i++;
for(power=1.0;is_digit(s[i]);i++)//计算小数点后的数字
{
value=value*10.0+(s[i]-'0');
power*=10.0;
}
return sign*value/power;
}



