问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言字符串到数值的转换方法

创作时间:
作者:
@小白创作中心

C语言字符串到数值的转换方法

引用
CSDN
1.
https://blog.csdn.net/Annaka918/article/details/143956749

在C语言编程过程中,在遇到转换字符串类型的项目时,本着能省事就省事的原则,这里分别提供了使用标准库函数和不使用标准库函数的方法来供大家选择。
首先,如果你要使用以下特定库函数,那么需要引用 <stdlib.h> 头文件。

1. atoi 函数

  • 功能:将字符串转换为整数( int 类型)。
  • 原型: int atoi(const char *str);
  • 说明: atoi 函数会忽略字符串开头的空白字符,直到遇到非数字字符(包括空字符'\0')为止,然后将这些字符解释为一个整数并返回。如果字符串不以数字开头, atoi 返回0。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "1234";
    int num = atoi(str);
    printf("The integer value is %d\n", num);
    return 0;
}

2. atol 函数

  • 功能:将字符串转换为长整型( long int 类型)。
  • 原型: long int atol(const char *str);
  • 说明:与 atoi 类似,但返回值是 long int 类型,可以处理更大范围的整数。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "1234567890";
    long int num = atol(str);
    printf("The long integer value is %ld\n", num);
    return 0;
}

3. atof 函数

  • 功能:将字符串转换为双精度浮点数( double 类型)。
  • 原型: double atof(const char *str);
  • 说明: atof 函数会扫描参数字符串,跳过前面的空白字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时才结束转换,并将结果返回。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "123.45";
    double num = atof(str);
    printf("The double value is %f\n", num);
    return 0;
}

4. strtol 函数

  • 功能:将字符串转换为长整型( long int 类型),并允许指定数字的基数。
  • 原型: long int strtol(const char *str, char **endptr, int base);
  • 说明: strtol 函数可以指定数字的基数(如二进制、八进制或十六进制),并且可以通过 endptr 参数来获取未转换部分的指针。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "1234";
    char *end;
    long int num = strtol(str, &end, 10);
    printf("The long integer value is %ld\n", num);
    return 0;
}

5. strtoul 函数

  • 功能:将字符串转换为无符号长整型( unsigned long int 类型)。
  • 原型: unsigned long int strtoul(const char *str, char **endptr, int base);
  • 说明:与 strtol 类似,但返回值是无符号长整型,适用于转换无符号整数。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "1234";
    char *end;
    unsigned long int num = strtoul(str, &end, 10);
    printf("The unsigned long integer value is %lu\n", num);
    return 0;
}

6. strtod 函数

  • 功能:将字符串转换为双精度浮点数( double 类型)。
  • 原型: double strtod(const char *str, char **endptr);
  • 说明: strtod 函数用于将字符串转换为 double 类型的浮点数,并且可以通过 endptr 参数来获取未转换部分的指针。
#include <stdio.h>
#include <stdlib.h>
int main() 
{
    char str[] = "123.45";
    char *end;
    double num = strtod(str, &end);
    printf("The double value is %f\n", num);
    return 0;
}

7.不使用标准库(stdlib)函数

如果你觉得记忆上文中的标准库函数过于麻烦,也可以不使用标准库函数,手动完成转换。

代码解释:

  • 函数**stringToInt**:这个函数接受一个字符串参数str,并返回一个整数。
  • 处理符号:首先检查字符串的第一个字符是否是'-''+',以确定数值的符号。
  • 遍历字符串:从字符串的第一个有效数字字符开始,逐个字符转换为数值,并累加到结果中。这里通过str[i] - '0'将字符转换为对应的整数(例如,'1' - '0' = 1)。
  • 返回结果:根据之前确定的符号返回最终的结果。

#include <stdio.h>
// 函数声明
int stringToInt(const char *str);
int main() 
{
    const char *str = "1234";
    int value = stringToInt(str);
    printf("The integer value is: %d\n", value);
    return 0;
}
// 将字符串转换为整数的函数
int stringToInt(const char *str) 
{
    int result = 0;  // 存储最终的数值结果
    int sign = 1;   // 符号,1表示正数,-1表示负数
    int i = 0;      // 字符串的索引
    // 处理可能的符号
    if (str[0] == '-') 
    {
        sign = -1;
        i = 1;
    } 
    else if (str[0] == '+') 
    {
        i = 1;  // '+'不影响数值,只是跳过它
    }
    // 遍历字符串,转换为数值
    for (; str[i] != '\0'; i++) 
    {
        if (str[i] < '0' || str[i] > '9') 
        {
            break;  // 遇到非数字字符,停止解析
        }
        result = result * 10 + (str[i] - '0');  // 将字符转换为对应的数值并累加
    }
    return sign * result;  // 根据符号返回最终结果
}
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
C语言字符串到数值的转换方法