参考MSDN
这个意思就是将字符串转换为double(atof)、integer(atoi,_atoi64)或long(atol)
简单来说就是把字符串”1234“转换成1234
代码实现如下(示例):
//模拟实现atoi函数
//第一步:先实现一下atoi函数
int main()
{
char arr[10] = "1234";
int ret = atoi(arr);
printf("%d\n", ret);
return 0;
}
代码如下(示例):
//模拟实现atoi函数
int my_atoi(const char* str)
{
int n = 0;
while (*str)
{
n = n * 10 + (*str) - '0';
str++;
}
return n;
}
int main()
{
char arr[10] = "1234";
int ret = my_atoi(arr);
printf("%d\n", ret);
return 0;
}
我们在模拟实现atoi函数的时候会遇到很多问题,下面让我来给大家一 一列举!
我们应该用assert断言一下str指针,确保不是空指针!
代码如下(示例):
//字符串为空
if (*str == '\0')
{
return 0;
}
,如果字符串前面有空格,就用isspace判断空格,并跳过空格所在的地址!(不要忘了头文件)
代码如下(示例):
//空白字符
while (isspace(*str))
{
str++;
}
,如果字符串里面有正负号的情况下,返回的也必须是正数或者负数!所以定义变量flag!
代码如下(示例):
int flag=1;
//判断正负号
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
n = n * 10 + flag * (*str - '0');
str++;
,用isdigit判断数字,如果数组里面带有ab等字符返回0(不要忘了头文件)
代码如下(示例):
if (isdigit(*str))
{
//......
}
else//不是数字是字符
{
break;
}
str++;
,如果这个数字大于INT_MAX或者小于INT_MIN就会返回0
代码如下(示例):
if (n<INT_MIN || n> INT_MAX)
{
n = 0;
break;
}
这里有两种情况,1.转换完数组中全部数字后的\0返回。2.各种错误及非法访问返回的0
两种\0要进行判断,我们需要创建一个enum枚举常量!
代码如下(示例):
enum Status
{
VALID, //0
INVALID //1
}status = INVALID;
//正常的\0返回值判断
if (*str == '\0')
{
status = VALID;
}
代码如下(示例):
if (status == VALID)
printf("正常转化: %d\n", ret);
else
printf("非法转换: %d\n", ret);
代码如下(示例):
#include
#include
#include
enum Status
{
VALID,
INVALID
}status = INVALID;
int my_atoi(const char* str)
{
int flag = 1;
//判断空指针
assert(str);
//字符串为空
if (*str == '\0')
{
return 0;
}
//空白字符
while (isspace(*str))
{
str++;
}
//判断正负号
if (*str == '+')
{
flag = 1;
str++;
}
else if (*str == '-')
{
flag = -1;
str++;
}
long long n = 0;
while (*str != '\0')
{
if (isdigit(*str))
{
n = n * 10 + flag * (*str - '0');
if (n<INT_MIN || n> INT_MAX)
{
n = 0;
break;
}
}
else//不是数字是字符
{
break;
}
str++;
}
if (*str == '\0')
{
status = VALID;
}
return (int)n;
}
int main()
{
char arr[100] = "123";
int ret = my_atoi(arr);
if (status == VALID)
printf("正常转化: %d\n", ret);
else
printf("非法转换: %d\n", ret);
return 0;
}
例如:以上就是今天要讲的内容,本文介绍atoi函数的使用方法和模拟实现,大家以后接触一个函数之后也可以像这样来进行学习,如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!