自己用C语言写itoa 函数和atoi函数

有些库中有atoi()函数,但没有itoa()函数,怎么办?自己写啊!!!

一:先来看看库atoi()函数和itoa()函数的用法:

1.atoi 是把字符串转换成整型数的一个函数,int atoi(const char *nptr) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。

代码实现如下:

//vs2013里调用printf函数请使用预处理命令#define _CRT_SECURE_NO_WARNINGS
int main()
{
	char a[] = "-100";
	char b[] = "123";
	int c;
	c = atoi(a) + atoi(b);
	printf("c=%d\n", c);
	getchar();
	return 0;
}

2.itoa 为c语言的一个函数。itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言。它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通过header ,因为它是一个从逻辑对应到标准库的函数。itoa 取整数输入值,并将其转换为相应进制数字的字符串。

char *itoa( int value, char *string,int radix); 
原型说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等。
功能:

把一个整数转换为字符串

代码实现如下:

int main(void)
{
	int number = 12345;
	char string[32];
	itoa(number, string, 10);
	printf("integer = %d \nstring = %s\n", number, string);
	getchar();
	return 0;
}

二:自己来实现itoa()函数和atoi()函数

1.自己来实现itoa,直接上代码:

void my_itoa(long i, char *string)
{
	int power = 0, j = 0;

	j = i;
	for (power = 1; j>10; j /= 10)
		power *= 10;

	for (; power>0; power /= 10)
	{
		*string++ = '0' + i / power;
		i %= power;
	}
	*string = '\0';
	printf("%s\n", string);
}
int main()
{
	char string[20];
	long timestamp = 1526567094;
	my_itoa(timestamp, string);
	printf("%s\n", string);
	getchar();
	return 0;
}

2.1.自己来实现atoi,直接上代码:

//char *a = "12345";//是一个char *型变量,位于常量存储区 不可更改指针指向的数据
//char a[] = "12345";//一个char型数组
int my_atoi(char *str)
{
	if (!str)
		return -1;
	bool bMinus = false;
	int result = 0;

	if (('0'>*str || *str>'9') && (*str == '+' || *str == '-'))
	{
		if (*str == '-')
			bMinus = true;
		*str++;
	}
	while (*str != '\0')
	{
		if ('0'> *str || *str>'9')
			break;
		else
			result = result * 10 + (*str++ - '0');
	}

	if (*str != '\0')//no-normal end  
		return -2;

	return bMinus ? -result : result;
}
int main(void)
{
	char c1[] = "12345";
	char c2[] = "-12345";
	char c3[] = "bat-123";
	char c4[] = "+123abc";

	printf("c1=%d\n", my_atoi(c1));
	printf("c2=%d\n", my_atoi(c2));
	printf("c3=%d\n", my_atoi(c3));
	printf("c4=%d\n", my_atoi(c4));
	getchar();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weibo1230123/article/details/80357898