stdlib.h
头文件具有以下可用于将字符串转换为数值的函数。
这些函数需要一个参数,参数是指向字符串的指针或类型为char
的数组,其中包含表示数值的字符串。
函数 | 返回值 |
---|---|
atof() |
将字符串转换为double 类型。 |
atoi() |
将字符串转换为int 类型。 |
atol() |
将字符串转换为long 类型。 |
atoll() |
将字符串转换为long long 类型。 |
对于所有四个函数,将忽略前导空格(isspace()
返回true
)。
除了不能构成数字值的那部分的值的字符之后的任何字符也将被忽略。
char value_str[] = "12.4";
double value = atof(value_str); // 将字符串转换为浮点数
以下函数将子字符串转换为浮点值。
函数 | 返回值 |
---|---|
strtod() |
将substring 转换为double 类型 |
strtof() |
将substring 转换为float 类型。 |
strtold() |
将substring 转换为long double 类型。 |
这些函数能识别INF
,INFINITY
和NAN
。
它们将识别具有或不具有十进制或十六进制形式的指数的浮点值。十六进制值必须以0x
或0X
开头。
以下是如何将多个子字符串从单个字符串转换为double
值:
double value = 0;
char str[] = "1.5 1.5 1.26"; // 要转换的字符串
char *pstr = str; // 指向要转换的字符串的指针
char *ptr = NULL; // 转换后指向字符位置的指针
while(true)
{
value = strtod(pstr, &ptr); // 从pstr开始转换
if(pstr == ptr) // 如果没有转换,则存储pstr ...
break; // ...转换完成
else
{
printf(" %f", value); // 输出结果值
pstr = ptr; // 存储下一次转换的开始
}
}
strtoll()
,strtoul()
和strtoull()
将子字符串分别转换为:long long
,unsigned long
和unsigned long long
类型的值。