【C语言】atoi模拟实现

函数介绍

int atoi( const char *string );

头文件:stdlib.h

功能:将字符串转换成整型数;atoi()会扫描参数string字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换(数字或正负号前面只能有空格,若有其它字符则放回数字0,即失败的情况),而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。

atoi使用

#include 
#include 

int main()
{
	char *ptr1 = "-12345.12";
	char *ptr2 = "+1234w34";
	char *ptr3 = "   456er12";
	char *ptr4 = "er789 123";
	char *ptr5 = "0789 123";

	int a = atoi(ptr1);
	int b = atoi(ptr2);
	int c = atoi(ptr3);
	int d = atoi(ptr4);
	int e = atoi(ptr5);
	printf("a = %d, b = %d, c = %d, d = %d,e = %d\n", a, b, c, d, e);
	return 0;
}

在这里插入图片描述

atoi模拟实现

#include
#include

int my_atoi(const char* string)
{
	assert(string != NULL);//断言,保证指针的有效性,防止野指针
	char* tmp = (char*)string;//权限只能缩小不能放大,所以要强制类型转换
	//先排除最前面的空格(如果有的话)
	while ((*tmp)==' ')
	{
		tmp++;
	}
	//flag作为正负号的判断标志
	int flag = 1;
	//排除最前面的空格后判断第一个非空格字符
	//如果该字符是正负号或者0 - 9的话正确
    //要是其他字符就结束函数返回0
	switch(*tmp)
	{
	case '+':
		tmp++;//跳过正号到下一个字符位置
		break;
	case '-'://跳过负号到下一个字符位置,并把flag置为-1
		flag = -1;
		tmp++;
		break;
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
		break;
	default://其他非正负号或者0 - 9字符,直接结束函数返回0
		return 0;
	}
	//获取字符串中的整数
	int ret = 0;
	while (*tmp >= '0' && *tmp <= '9')
	{
		ret = ret * 10 + *tmp-'0';
		tmp++;
	}
	return ret*flag;
}

int main()
{
	//测试
	char *ptr1 = "-12345.12";
	char *ptr2 = "+1234w34";
	char *ptr3 = "   456er12";
	char *ptr4 = "0789 123";
	int a = my_atoi(ptr1);
	int b = my_atoi(ptr2);
	int c = my_atoi(ptr3);
	int d = my_atoi(ptr4);
	printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);
	return 0;
}

你可能感兴趣的:(C语言)