免费的网站免安装,用户登录入口,大连地区建设网站,百度推广太原网站建设萌新的学习笔记#xff0c;写错了恳请斧正。 目录
atoi
模拟实现
atol与atoll#xff08;C99起#xff09;
atof
合法的浮点值
返回值
使用示例 在stdlib.h中还有几个有意思的字符串函数
它们的功能是将字符串开头的数字提取出来
下面我们具体看一看这几个函数吧
…萌新的学习笔记写错了恳请斧正。 目录
atoi
模拟实现
atol与atollC99起
atof
合法的浮点值
返回值
使用示例 在stdlib.h中还有几个有意思的字符串函数
它们的功能是将字符串开头的数字提取出来
下面我们具体看一看这几个函数吧
atoi
#include stdlib.h
int atoi(const char* string);
atoi即auto int。舍弃任何空白符直至找到首个非空白符然后接收尽可能多的字符以组成合法的整数可以有负号表示并转换之为整数值。如果没有读取到数字就返回0如果超出可读取类型范围那么返回值是未定义的。
使用示例如下
#include stdio.h
#include stdlib.hint main(void)
{printf(%i\n, atoi( -123junk));printf(%i\n, atoi(0));printf(%i\n, atoi(junk)); // 无可进行的转换printf(%i\n, atoi(2147483648)); // 在 int 范围外
}
输出
-123
0
0
-2147483648
模拟实现
#include stdio.h
#include ctype.h
#include assert.hint my_atoi(const char* str)
{assert(str);int ret 0, sign 1, flag 1;while (isspace(*str));str - 2;while (isdigit(*str) || - *str flag || *str flag)if (*str -)flag 0, sign -1;else if (*str )flag 0, sign 1;elseflag 0, ret 10 * (ret *str - 0);return sign * ret / 10;
}int main()
{char str[] -114514;int ret my_atoi(str);printf(%d, ret);return 0;
}
atol与atollC99起
与atoi功能完全一致只是变成long和long long类型
#include stdlib.h
long atol(const char* string);
long long atoll(const char* string);
atof
atof用于提取的是浮点数小数形式或者科学计数法
atof函数使用需要包含stdlib.h和math.h两个头文件
#include stdlib.h
#include math.h
double atof(const char* string);
函数会舍弃任何空白符直至找到首个非空白符。然后它会取用尽可能多的字符以构成合法的浮点数表示并将它们转换成浮点值。
合法的浮点值
1. 十进制浮点数表达式。它由下列部分组成
(可选) 正或负号非空的十进制数字序列可选地包含一个小数点字符由当前的 C本地环境确定定义有效数字(可选) e 或 E 并跟随可选的正或负号以及非空十进制数字序列以 10 为底定义指数
2. 十六进制浮点数表达式(C99 起)。它由下列部分组成
(可选) 正或负号0x 或 0X非空的十六进制数字序列选地包含一个小数点字符由当前的C本地环境确定定义有效数字(可选) p 或 P 并跟随可选的正或负号以及非空十进制数字序列以 2 为底定义指数
3. 无穷大表达式(C99 起)。它由下列部分组成
(可选) 正或负号INF 或 INFINITY 忽略大小写
4. 非数NaN表达式(C99 起)。它由下列部分组成
(可选) 正或负号NAN 或 NAN(char_sequence) 忽略 NAN 部分的大小写。 char_sequence 只能由数字、拉丁字母和下划线构成。结果是一个静态的 NaN 浮点值。
5. 任何其他可由当前C本地环境接受的表达式
返回值
成功时返回代表string内容的double值
若转换的值在返回值范围外则返回值未定义
若无可进行的转换则返回 0.0
使用示例
#include stdlib.h
#include stdio.hint main(void)
{printf(%g\n, atof( -0.0000000123junk));printf(%g\n, atof(0.012));printf(%g\n, atof(15e16));printf(%g\n, atof(-0x1afp-2));printf(%g\n, atof(inF));printf(%g\n, atof(Nan));printf(%g\n, atof(1.0e309)); // 超出 double 范围printf(%g\n, atof(0.0));printf(%g\n, atof(junk)); // 无可进行的转换
}
在某种环境下输出
-1.23e-08
0.012
1.5e17
-107.75
inf
nan
inf
0
0