• C和C++中的数字与字符串的转换


    用过java的人都知道,java众多的方法能够非常方便的进行数字和字符串之间的转换,而C和C++就麻烦多了。

    其实不然,C和

    C++也是提供了方便的方法进行转换,不必手写。

    1.字符串格式化函数:sscanf和sprintf(stdio.h)

    函数原型:

    int sscanf( const char *, const char *, ...);

    int sscanf(const char *buffer,const char *format,[argument ]...);

    buffer 存储的数据

    format 格式控制字符串

    argument 选择性设定字符串

    sscanf会从buffer里读进数据,依照argument的设定将数据写回。

    成功则返回参数数目,失败则返回0,错误原因存于errno中。

    其实sscanf和scanf基本一样,只不过scanf是从输入流读取数据,sscanf从字符数组buffer读取数据,而格式控制字符串format与scanf基本一样,同样可以使用扫描集进行读取操作。format的具体说明可以参考我的博文:http://www.cnblogs.com/ay27/archive/2012/11/15/2771425.html

    函数原型:

    int sprintf( char *buffer, const char *format, [ argument] … );

    buffer 存储的数据

    format 格式控制字符串

    argument 选择性设定字符串

    sprintf会从argument中读取数据,按照format格式写入到buffer中。

    最后sprintf返回字符串的长度,相当于一次strlen的调用。

    至于format也是与printf基本一样。

    有这两个函数基本上可以解决多数的字符串和数字转换的问题了,不过这两个函数有时会发生一些很奇怪的问题。这时我们可以用库里边的转换函数。

    2.字符串转数字(atoi,atol,atof)(stdlib.h)

    函数原型:

    int atoi(const char *nptr);

    long atol(const char *nptr);

    double atof(const char *nptr);

    从函数的返回值可以看出它们对应的数据类型了,这个转换非常好用,基本上不会怎么出现莫名其妙的错误,当然nptr数组要设置好了的情况下。

    至于strtol,strtoul,strtod等的函数是上面几个的增强版,主要能够处理多种进制方式的数据,只给出函数原型,具体不多说。

    函数原型:

    long strtol(const char *nptr, char **endptr, int base);  //nptr存储的数据,endptr存储非法数据(若为NULL则不返回非法数据),base是进制方式(从2到36,比如16就是采取16进制方式存储)

    double strtod(const char *nptr,char **endptr);

    unsigned long strtoul(const char *nptr,char **endptr,int base);

    3.C++风格的stringstream(字符串流)(sstream)

    double xx = 23.5;
    stringstream s;
    s<<xx;   //将xx转换成字符串流s
    cout<<s.str()<<endl;   //将字符串流输出
    double yy;
    s>>yy;    //将字符串流转换成数字
    cout<<yy<<endl;

    这样还用什么可说的呢?

  • 相关阅读:
    2018年秋季个人阅读计划
    java当中JDBC当中JNDI用来查找dataSource的例子
    为什么要引入激活函数?
    为什么引入神经网络来做识别,判断,预测?
    给出一个生活中的最简单的两层神经网的实际例子
    MapReduce的输入文件是两个
    hadoop在eclipse当中如何添加源码?
    MapReduce的shuffle过程详解
    hadoop WordCount例子详解。
    Hadoop的eclipse的插件是怎么安装的?
  • 原文地址:https://www.cnblogs.com/ay27/p/2923716.html
Copyright © 2020-2023  润新知