函数功能:
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。atoi( ) 函数会扫描参数 ptr字符串,跳过前面的空白字符(例如空格,tab缩进等)。
可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回(返回转换后的整数值);
模拟实现:
//模拟实现atoi
enum //有效数字和无效数字的区分
{
INVALUE=0,
VALUE
};
int num = INVALUE;
int my_atoi(char *buff)
{
int flag = 1; //正负号 1为正数 -1为负数
assert(buff); //断言
long long ret = 0; //因为有可能溢出,需要用long long来判断溢出
if (*buff == '\0') //判断是否位空字符串
{
return 0;
}
//if (buff == NULL) //判断空指针
//{
// return;
//}
while (isspace(*buff)) //跳过空格
{
buff++;
}
if (*buff == '-') //判断正负号
{
buff++;
flag = -1;
}
while (isdigit(*buff)) //isdigit:判断字符是否为0~9的十进制数
{
ret = ret * 10 + flag*(*buff - '0'); //赋值
buff++;
if ((ret > INT32_MAX) || (ret < INT32_MIN)) //溢出
{
num = INVALUE;
}
else
{
num = VALUE; //没有溢出 改为有效
}
}
return int(ret);
}
int main()
{
char buf[] = "12345";
int tmp = my_atoi("12@#$345");
if (num == 1)
{
printf("VALUE: %d\n", tmp);
}
else if (num == 0)
{
printf("INVALUE: %d\n", tmp);
}
system("pause");
return 0;
}
测试结果为12;