zoukankan      html  css  js  c++  java
  • 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;

    这样还用什么可说的呢?

  • 相关阅读:
    < java.util >-- Set接口
    Codeforces 627 A. XOR Equation (数学)
    Codeforces 161 B. Discounts (贪心)
    Codeforces 161 D. Distance in Tree (树dp)
    HDU 5534 Partial Tree (完全背包变形)
    HDU 5927 Auxiliary Set (dfs)
    Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
    lght oj 1257
    Codeforces 219D. Choosing Capital for Treeland (树dp)
    Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
  • 原文地址:https://www.cnblogs.com/ay27/p/2923716.html
Copyright © 2011-2022 走看看