zoukankan      html  css  js  c++  java
  • C语言中将字符串转换为数字的方法

    C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子:

    # include <stdio. h>
    # include <stdlib. h>
    void main (void) ;
    void main (void)
    {
        int num;
        char * str = "100";
        num = atoi(str);
        printf("The string 'str' is %s and the number 'num' is %d. ",
                       str, num);
    }
      
    atoi()函数只有一个参数,即要转换为数字的字符串。atoi()函数的返回值就是转换所得的整型值。   

    下列函数可以将字符串转换为数字:
    ------------------------------------------------------------------------
        函数名    作  用
    ------------------------------------------------------------------------
     atof()     将字符串转换为双精度浮点型值
     atoi()     将字符串转换为整型值
     atol()     将字符串转换为长整型值
     strtod()   将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字
     strtol()   将字符串转换为长整值,并报告不能被转换的所有剩余数字
     strtoul()  将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字
    ------------------------------------------------------------------------  
      
    将字符串转换为数字时可能会导致溢出,如果你使用的是strtoul()这样的函数,你就能检查这种溢出错误。请看下例:  
    # include <stdio. h>
    # include <stdlib. h>
    # include <limits. h>
    void main(void);
    void main (void)
    {
        char* str = "1234567891011121314151617181920" ;
        unsigned long num;
        char * leftover;
        num = strtoul(str, &leftover, 10);
        printf("Original string: %s ",str);
        printf("Converted number: %1u " , num);
        printf("Leftover characters: %s " , leftover);
    }

    在上例中,要转换的字符串太长,超出了无符号长整型值的取值范围,因此,strtoul()函数将返回ULONG_MAX(4294967295),并使。char leftover指向字符串中导致溢出的那部分字符;同时,strtoul()函数还将全局变量errno赋值为ERANGE,以通知函数的调用者发生了溢出错误。函数strtod()和strtol()处理溢出错误的方式和函数strtoul()完全相同,你可以从编译程序文档中进一步了解这三个函数的有关细节。

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/3801701.html
Copyright © 2011-2022 走看看