字符数字转换函数
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;
}