您的位置:首页 > 其它

类型转换 atoi, itoa, atof

2018-02-27 16:06 288 查看

字符型 to 整型

int atoi(char s[])
{
int i, sign, n;

for(i = 0; isspace(s[i]); i++)   /*跳过空白符*/
;
sign = (s[i] == '-') ? -1 : 1;
if(s[i] == '+' || s[i] == '-')   /*跳过符号*/
i++;
for(n = 0; isdigit(s[i]); i++)
n = 10 * n + (s[i] - '0');

return sign * n;
}

整型 to 字符型

void itoa(int n, char s[])
{
int i, sign;

if((sign = n) < 0)   /*记录符号*/
n = -n;          /*使n成为正数*/
i = 0;
do{                  /*以反序生成数字*/
s[i++] = n % 10 + '0';   /*取下一个数字*/
}while((n /= 10) > 0);       /*删除该数字*/
if(sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}

void reverse(char s[])
{
int c, i, j;

for(i = 0, j = strlen(s); i < j; i++, j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}


字符型 to 浮点型(可处理科学计数法)

double atof(char s[])
{
double val, power, spower;
int i, sign;
int expn = 0;

for(i = 0; isspace(s[i]); i++)         /*跳过空白符*/
;
sign = (s[i] == '-') ? -1 : 1;         /*记录符号*/
if(s[i] == '+' || s[i] == '-')         /*跳过符号*/
i++;
for(val = 0.0; isdigit(s[i]); i++)     /*处理整数部分*/
val = 10.0 * val + (s[i] - '0');
if(s[i] == '.')                        /*跳过小数点*/
i++;
for(power = 1.0; isdigit(s[i]); i++){  /*处理小数部分*/
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
}

if(s[i] == 'e' || s[i] == 'E'){        /*处理科学计数法表示的情况*/
if(s[++i] == '-'){                 /*(彻底)跳过e或E*/
++i;                           /*跳过符号*/
for(; isdigit(s[i]); i++)      /*处理指数部分*/
expn = 10 * expn + (s[i] - '0');
power = pow(10, expn) * power;
}
else{      /*包含有'+'和没有符号两种情况*/
if(s[i] == '+')
i++;
for(; isdigit(s[i]); i++)      /*处理指数部分*/
expn = 10 * expn + (s[i] - '0');
power = power / pow(10, expn);
}
}
return sign * val / power;
}

tip: 标准库(<stdlib.h>)中提供了具有类似功能的函数atoi, itoa, atof

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