//atoi函数如下
#include<stdio.h>
#include<ctype.h>
int atoi(const char* str)
{
int i,sign ;
for(i = 0; isspace(str[i]);i++)
;
sign = (str[i]=='-')? -1:1 ; //三目表达式,不多解释
if(str[i]=='+'||str[i]=='-')
i++;
for(int n = 0 ;isdigit(str[i]);i++)
n = 10*n + (str[i] - '0');
return n*sign ;
}
int main()
{
char * s =" -13.23";
printf("%d \n",atoi(s));
return 0 ;
}
int atoi(const char* str)
{
int i,sign ;
for(i = 0; isspace(str[i]);i++)
;
sign = (str[i]=='-')? -1:1 ; //三目表达式,不多解释
if(str[i]=='+'||str[i]=='-')
i++;
for(int n = 0 ;isdigit(str[i]);i++)
n = 10*n + (str[i] - '0');
return n*sign ;
}
int main()
{
char * s =" -13.23";
printf("%d \n",atoi(s));
return 0 ;
}
//下面就是对atoi函数小数点以后的数进行处理,以便于能够得到double类型的数据。
double atof(const char s[]) //把一个字符串转换成double型的数据
#include<stdio.h>
#include<ctype.h>
double atof(char s[])
{
double var,power;
int sign = 1;
int i ;
for( i = 0; isspace(s[i]) ;i++)
;
sign =(s[i]=='-')? -1:1;
if(s[i] == '+' || s[i] == '-')
i++;
for(var = 0.0 ; isdigit(s[i]);i++)
var = 10.0 * var + (s[i] - '0');
if(s[i]=='.')
i++;
for(power = 1.0;isdigit(s[i]);i++)
{
var = 10.0 * var +(s[i] - '0');
power *= 10;
}
return sign * var /power;
}
int main()
{
char *s = "12.23";
printf("%f",atof(s));
return 0 ;
}
//atof中 两种格式的转化
//
// main.c
// StrToInt
//
// Created by lichan on 13-10-16.
// Copyright (c) 2013年 lichan. All rights reserved.
//
#include <stdio.h>
#include <ctype.h>
#include <math.h>
int atoi(const char * str)
{
int i,sign=1,n;
for (i = 0; isspace(str[i]); i++)
;
if (str[i]=='+'||str[i]=='-')
{
sign = (str[i]=='+')? 1:-1;
i++;
}
for (n = 0; isdigit(str[i]); i++)
n = 10*n + (str[i]-'0');
return n*sign;
}
float atof(const char * str)
{
int i,sign = 1;
float signP;
int resultInt=0 ;
float resultPoint=0.0;
for (i = 0; isspace(str[i]); i++)
;
if (str[i]=='+'||str[i]=='-')
{
sign = (str[i]=='+')? 1:-1;
i++;
}
while(isdigit(str[i]))
{
resultInt = 10*resultInt + (str[i] -'0');
i++;
}
if(str[i]=='e'||str[i]=='E')
{
i++;
printf("e出现了.\n");
if (str[i]=='+'||str[i]=='-')
{
signP = (str[i]=='+')? 10:0.1;
i++;
}
while(isdigit(str[i]))
{
resultPoint= 10*resultPoint + (str[i] -'0');
printf("%f\n",resultPoint);
i++;
}
return sign*resultInt*pow(signP, resultPoint);
}
else if(str[i++]=='.')
{
for (signP = 0.1; isdigit(str[i]); i++)
{
resultPoint += signP*(str[i] -'0');
signP *=0.1;
printf("%f\n",resultPoint);
}
return sign*resultInt+resultPoint;
}
return 0 ;
}
int main(int argc, const char * argv[])
{
char *str ="123e+5";
char *str1="1234.23";
printf("%f\n",atof(str1));
return 0;
}