itoa 、atoi 字符串与整数之间的转换

  • 文档内容
    • 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");
}
posted @ 2016-11-27 19:28  呉语伦比  阅读(254)  评论(0)    收藏  举报