C/C++字符串相关类型转换

字符数字转换函数

C++风格

C++ 11 提供了若干 to_string(T value) 函数来将 T 类型的数字值转换为字符串形式。以下是几个 to_string() 函数的列表:

string to_string(int value)
string to_string(long value)
string to_string(double value)

to_string() 函数无法处理非十进制整数的转换。如果需要该功能,则应该使用 ostringsteam 对象来完成该转换。

字符串到数字的转换可以通过 stoX() 系列函数来执行。该系列函数的成员可以将字符串转换为 int、long、float 和 double 类型的数字。具体语法如下所示:

int stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)

第一个形参 str 是一个字符串(例如 "-342" 或 "3.48" 等),它将被转换为恰当的数字形式。这些函数可以将 str 可能的最长前缀转换为数字,并返回一个整数地址 pos,pos 中保存了 str 无法被转换的第一个字符的索引。类型 size_t 是在标准库中定义的,常用于表示无符号整数的大小或数组、矢量、字符串中的一个索引。

例如,如果试图转换字符串 "-34iseven",则将成功返回整数 -34,而无法转换的第一个字符的位置 pos 则被设置为3。base形参仅适用于整数转换,指示用于转换的进制。pos 和 base 形参都是可选的。如果 pos 被忽略,则不会存储停止字符的索引。如果 base 被忽略,则默认为十进制。如果字符串 str 包含一个无效值,例如 "is-34 even?",则不会进行转换,函数将抛出一个 invalid_argument 异常。

 

利用stringstream

添加头文件 #include<sstream>

#include <string>

#include <sstream>

 

int main(){
double a = 123.32;
string res;
stringstream ss;             //定义流ss

//数字转字符串
ss << a;                      //将数字a转化成流ss
ss >> res;                    //将流ss转化成字符串

//字符串转数字

ss << res;

ss >> a;

return 0;
  }

 

 

转换为C风格的字符串

在实际编程中,有时候必须要使用C风格的字符串(例如打开文件时的路径),为此,string 类为我们提供了一个转换函数 c_str(),该函数能够将 string 字符串转换为C风格的字符串,并返回该字符串的 const 指针(const char*)。请看下面的代码:

string path = "D:\\demo.txt";

FILE *fp = fopen(path.c_str(), "rt");

为了使用C语言中的 fopen() 函数打开文件,必须将 string 字符串转换为C风格的字符串。

 

C风格

利用 sprintf()函数和sscanf()函数

sprintf() 用于将数字转化为字符串

#include <iostream>

#include <string>

using namespace std;

int main()

{

    char str[10];

    int a=1234321;

    //将整数转化为字符串

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

 

    char str1[10];

    double b=123.321;

    / /将浮点数转化为字符串

    sprintf(str1,"%.3lf",b);

    return 0;

}

sscanf() 用于将字符串转化为数字

#include <iostream>

#include <string>

using namespace std;

int main()

{

    char str[]="1234321";

    int a;

    sscanf(str,"%d",&a);

 

    char str1[]="123.321";

    double b;

    sscanf(str1,"%lf",&b);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值