- 文档内容
- itoa、atoizhuanh
- ftoa
- atof
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int myatoi(char *str)
{
char *istr = str;
while (*istr!='\0')//遍历每一个字符
{
/* if (!(*istr <='9' && *istr >='0'))
{
return 0;
}*/
if (*str >'9' || *str <'0')
{
return 0;
}
istr++;
}
int lastnum = 0;
for (int i = 0;i<strlen(str);i++)
{
lastnum *= 10;
lastnum += str[i] - '0';
}
return lastnum;
}
//1234 123 12 1 0
char * myitoa( int num,char* str)
{
int wei = 0;
for (int inum=num;inum;inum/=10)
{
wei++;
}
//计算位数
//1234
// 4
//str[4],3
for (int i = wei-1; num;num/=10,i--)
{
str[i] = num % 10 + 48;//1+48='1'
}
//01234
str[wei] = '\0';
return str;
}
void main()
{
char str[10] = "1234543";
int num = myatoi(str);//字符串转整数
char strnew[20];// = { 0 };
//_itoa(num, strnew, 10);//整数转字符串
myitoa(num, strnew);
printf("%d", num);
printf("\n%s", strnew);
system("pause");
}
实数转字符串 ftoa
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
char * ftoa(double db, char *str)
{
char *istr = str;//备份首地址
if (db < 0)
{
*str = '-';//是负数
db *= -1;///负数转化为正数
str++;//指针向前移动
}
//12345 . 456
//-12345
int num = (int)db;//取出整数
int wei = 0;
for (int inum = num; inum;inum/=10)
{
wei++;//取出位数
}
//12345
//5
//1234 %10 4
for (int i = wei-1; i>=0 ;i--,num/=10)//填充了整数位
{
str[i]=num % 10+'0';
}
str += wei;
*str = '.';//处理小数点
//str[wei] = '\0';
double xiaoshu = db - (int)db;//取出小数
int xiaoshuwei = 0;
//0.123 1.23 1 12.3 12 123 123
//取出小数位
//ixiaoshu != (int)ixiaoshu精确描述
for (double ixiaoshu = xiaoshu; ixiaoshu!= (int)ixiaoshu ; ixiaoshu *= 10)
{
printf("\n%f", ixiaoshu - (int)ixiaoshu);
xiaoshuwei++ ;
if (xiaoshuwei>6)
{
break;//限定精确度
}
}
//.123 1.23 -1 0.23
for (int i = 0; i < xiaoshuwei;i++)
{
xiaoshu *= 10;//1.23 2.3 3
int data = (int) xiaoshu ;//1 2 3
printf("\n%d", data);
xiaoshu -= data;//0.23 0.3 0
str++;
*str = data+'0';//指针向前移动
}
*(++str) = '\0';
return istr;
}
void main()
{
double db = -12345.87525;
char str[100] = {0};
//sprintf(str, "%f", db);
ftoa(db, str);
printf("%s", str);
system("pause");
}
字符串转实数 atof
#include <stdio.h>
#include <stdlib.h>
double myatof(char *str) //严谨的myatof
{
double db = 0.0;
char * istr = str;
while (*istr!='\0')
{
if ( (*istr>'9' || *istr<'0') && *istr != '.' && *istr != '-' && *istr!='+') //不是数字,也不是. 也不是-
{
//printf("AAAA");判断代码执行到哪里
return db;//判断垃圾字符
}
istr++;
}
double fh = 1.0;
if (*str=='-')//检测第一个字符是否为符号位
{
fh *= -1;
str++;
}
else if (*str =='+')
{
str++;
}
//跳过符号位
//123 0*10+1 1*10+2 12*10+3 123
while (*str!='.') //123
{
db *= 10;
db += *str - '0';//获得了整数
//printf("%f\n", db);
str++;
}
str++;//跳过.
double xiaoshu = 1.0;
//0.234 1 0.1*2 +0.01*3+0.001*4
while (*str!='\0')
{
xiaoshu /= 10;
db += xiaoshu*(*str - '0');//累加小数
str++;
}
db *= fh;
return db;
}
void main()
{
char str[20] = "+12387.3456";// 1 0.1*3 0.01*4
double db = myatof(str);//字符串转实数
printf("%f", db);
system("pause");
}