c++中字符串与数字之间的相互转化

小白今天在编写代码的时候,碰到一个问题:需要将字符串“ 1234 ” 转化为数值1234,再加上312,小白因为是小菜鸟,自己先拙劣了写了一个转化的函数,bug多的改不过来,网上一搜,吼吼,踩在巨人的肩膀上,果然收获颇丰。

情况一:字符串转为化为数值

法1:C++中的stringstream

   #include <sstream>  //这个必须在预定义时将sstream给include一下

   using namespace std;

   char a[ 5 ]= "1234"

   int num;

   sstream( a );

   ss>>num;

   cout<< num<<“ ”<<num+1<<endl;  //输出结果1234 12345

   ps:此方法简单,但是若是转化大量的字符串为数值,效率较低

法2:c中的sscanf

   # include<stdio.h>

   char a[]="123";

   int i;

   float f;

   sscanf (a,"%d",&i);  //将a中的字符转化为int型数值

   sscanf (a,"%f",&f);   //将a中的字符转化为float型数值

   printf ("Integer is: %d ",i+1); // 输出:Integer is:124

   printf ("float is: %f ",f+1);       // 输出:float is:124.000000

法3:c标准库的atoi(转化为int型),atof(转化为float型),atoll(转化为long long型)

   # include<stdio.h>

   char a[]="123";

    int i;

    float f;

    i=atoi(a);

    f=atof(a);

   printf ("Integer is: %d ",i+1); // 输出:Integer is:124

   printf ("float is: %f ",f+1);       // 输出:float is:124.000000

    若为c++中的string类型,则需要调用c_str()方法来获取字符串的指针:

    # include<stdio.h>

    #include<string>

    using namespace std;  //小白一开始因为少了这一句话,定位了1个半小时,现在它就是我的心头痣!

    string a="123";

    int i;

    float f;

    i=atoi(a.c_str());

    f=atof(a.c_str());

    printf ("Integer is: %d ",i+1); // 输出:Integer is:124

    printf ("float is: %f ",f+1);       // 输出:float is:124.000000 

情况二:数值转化为字符串

方法1:C++中的stringstream

    #include<iostream>

    #include<string>

    using namespace std;  //头部预定义

    string b="bai";

    double i=756;

    stringstream ss;

    ss << i ;

    b=b+ss.str();   //输出:bai756

方法2:C库函数sprintf

    #include<iostream>

    using namespace std;

    int i=756;

    char a[10];

    sprintf ( a, " %d", i);

    strcat ( a, " bai " );

    for( int j=0; a[ j ] != ' \ 0 ' ; j ++)    //输出:756bai

           cout<<a [ j ] ;

总结:

1. 上文中的所有代码例子都只写了预定义和关键语句,不是完整的,加上main函数就可以进行调试了,尤其不能忘了using namespace std;

2. sstream中的ss >> 和 ss <<,以及c中的库函数 sprintf 和 sscanf 的相互对照记忆与使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值