• 【转】C/C++字符串和数字互换方案


    原文:http://www.cppblog.com/xiaozhuozhuo/archive/2007/07/23/28663.html

    ▲1、C语言标准库函数atoi()等。

    函数名: atoi
    功 能: 把字符串转换成整型数
    用 法: int atoi(const char *nptr);
    程序例:
    #include <stdlib.h>
    int main(void)
    {
    int n;
    char *str = "435";
    n = atoi(str);
    printf("string = %s integer = %d\n", str, n);
    return 0;
    }

    其他相关函数——

    函数名: atof
    功 能: 把字符串转换成浮点数
    用 法: double atof(const char *nptr);
    程序例:
    #include <stdlib.h>
    int main(void)
    {
    float f;
    char *str = "12345.67";
    f = atof(str);
    printf("string = %s float = %f\n", str, f);
    return 0;
    }

    函数名: atol
    功 能: 把字符串转换成长整型数
    用 法: long atol(const char *nptr);
    程序例:
    #include <stdlib.h>
    int main(void)
    {
    long l;
    char *str = "98765432";
    l = atol(lstr);
    printf("string = %s integer = %ld\n", str, l);
    return(0);
    }

    ▲2、sprintf与Format构造字符串——

        sprintf和printf都是C的产物,用法几乎一样,只是前者打印到字符串,后者直接在命令行上输出。
        int sprintf( char *buffer, const char *format [, argument] … );
        除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串(想想printf吧,一样的)。例:
    #include <iostream>
    int main()
    {
        double a(3112);
        char s1[10],s2[10];
        sprintf(s1,"%d\n",(int)a);
        sprintf(s2,"$%.2lf",a);
        std::cout<<s1<<s2<<std::endl;
    }

        在C++里,也可用Format(CString) :
    /*VS2005中,项目/属性/配置属性里字符集设置为未配置*/
    #include <iostream>
    #define _AFXDLL
    #include <afx.h>
    int main()
    {
        double a(32);
        CString s;
        s.Format("$%.2lf",a);
        std::cout<<s<<std::endl;
    }

    ▲3、字符串流stringstream提供的转换和/或格式化。

    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    using namespace std;
    int main()
    {
        int num(435);
        string s;
        ostringstream mystream;
        mystream<<num<<"\n";
        /*创建一个名为mystream的ostringstream类型空对象,
    并将指定的内容插入该对象。此时mystream的内容是以下字符:
    435\n*/
        s=mystream.str();
        cout<<s;
    }

    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    using namespace std;
    int main()
    {
        string s("435");
        int num;
        istringstream mystream(s);
        mystream>>num;/*num=435*/
        cout<<num<<endl;
    }

    ▲4、自己写函数。

    /*串到数,实参如("435",&number)*/
    void getnumber_from_string(char nums[],int *p)
    {
        int i,k=strlen(nums);
        for(i=0,(*p)=0;i<k;++i)
        (*p)+=pow_10(k-i-1)*(*(nums+i)-48);
    }
    int pow_10(int k) /*10的k次方*/
    {
        return (k==0?1:10*pow_10(k-1));
    }

     
    2007-07-24 08:39 by 漂舟
    楼主收集的方法还真不少,
    偶补充一个,strtol, strtoul, strtod, 这一系列标准库函数
     
    2007-07-24 09:40 by nickey
    boost::lexical_cast
     
    2007-07-24 09:54 by pass86
    强烈推荐boost::lexical_cast
    SO EASY.
     
    2008-09-06 03:25 by Robert
    Could you write down:
    char* itoa(int n, char* buf)
  • 相关阅读:
    vim7.1在windows下的编码设置[转]
    Swashbuckle(6.2.3)【Swagger(3.0)】 第一节
    Git命令集合
    ABP Framework(5.0.0rc) 第一节
    /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
    WPF中解决内存泄露的几点提示与解决方法
    用C#读取docx文件
    C#启动单个实例
    WPF学习心得(1):WPF进行动画后不能改变相对应的属性问题的解决
    [转]使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等
  • 原文地址:https://www.cnblogs.com/81/p/2932002.html
Copyright © 2020-2023  润新知