i:
atof是C语言标准库中的一个函数,用于将字符串转换为对应的浮点数/整形数。
函数接受一个参数str,该参数是一个指向以null结尾的字符串的指针。atof函数会尝试将这个字符串转换为一个浮点数,并返回转换后的结果。
要注意的是,atof函数在进行转换时会自动识别字符串中的浮点数表示形式,包括小数点、指数符号等。它会跳过字符串中的空格字符,直到遇到数字或者正负号。
如果无法进行有效的转换,atof函数会返回0.0作为转换结果。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ret1 = atoi("12345");
double ret2 = atof("3.1415926");
printf("%d\n", ret1);
printf("%f\n", ret2);
return 0;
}
模拟实现atoi函数
模拟实现时应防止读取空字符串,跳过空白字符串,处理正负号问题
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
#include <limits.h>
enum State
{
VALID,
INVALID
}state=INVALID;// 全局的状态,它的标志返回的合法的值还是异常的值
//对state初始化为INVAKID表示为非法访问
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 == '+')
{
str++;
}
long long ret = 0;
while (*str != '\0')
{
if (isdigit(*str))//判断该位是否为非0
{
ret = ret * 10 + flag * (*str - '0');
//防止访问数目过大
if (ret<INT_MIN || ret>INT_MAX)
{
return 0;
}
}
else
{
return (int)ret;
}
str++;
}
state = VALID;
return (int)ret;
}
int main()
{
int ret = my_atoi("-25");
if (state == VALID)
printf("%d\n",ret);
else
printf("非法访问:%d", ret);
return 0;
}
模拟实现中使用到的库函数:
1.isspace
isspace是C语言标准库中的一个函数,用于判断一个字符是否为空白字符。
空白字符包括空格、制表符、换行符、回车符等字符。isspace函数的原型如下:
int isspace(int c);
函数接受一个整数值(通常是字符的ASCII码)作为参数,并返回一个非零值(真)或零(假)。具体而言:
- 如果参数c是一个空白字符,函数返回非零值,表示真。
- 如果参数c不是一个空白字符,函数返回零,表示假。
isspace函数常用于判断一个字符是否为空白,可以在循环中使用它来处理文本字符串中的空白字符,或者判断用户输入是否为有效的空白字符。
2.isdigit
isdigit
是C语言标准库中的一个函数,用于判断一个字符是否为数字字符。它的原型如下:
int isdigit(int c);
isdigit
函数接受一个整数参数(通常是字符的ASCII码),并返回一个非零值(真)或零(假)。
具体而言:
- 如果参数c是一个数字字符(0-9),函数返回非零值,表示真。
- 如果参数c不是一个数字字符,函数返回零,表示假。
以下是一个示例代码,演示了如何使用 isdigit
函数判断一个字符是否是数字字符:
#include <stdio.h>
#include <ctype.h>
int main() {
char ch = '5';
if (isdigit(ch)) {
printf("'%c' 是一个数字字符\n", ch);
} else {
printf("'%c' 不是一个数字字符\n", ch);
}
return 0;
}
输出:
'5' 是一个数字字符
注意:isdigit
是C标准库中的函数,如果在C++中使用,应该包含头文件 <cctype>
,并将函数名写作 std::isdigit
。