文章目录
数字与字符串的转换
C++的stringstream类(来源:<sstream>)
1.字符串到数字
string str = "854";
stringstream sstr(str);
int x;
sstr >> x;//即从sstr中提取数据
2.数字到字符串
stringstream sstr;
string str;
double x = 154.83;
sstr << x;
str = sstr.str();//或者sstr >> str;
- 缺点:处理大量数据转换速度较慢。stringstream不会主动释放内存,如果要在程序中用同一个流,需要适时地清除一下缓存(用stream.str(“”)和stream.clear()).
- 注:
>>
是流提取符,<<
是流插入符
C标准库sprintf、sscanf函数(来源:<stdio.h> or <cstdio>)
1.用sprintf函数将数字转换成字符串(char[])
int val = 1234;
char str[10];
sprintf(str,"%d",val);
2.用sscanf函数将字符串(char[])转换成数字
char str[] = "15.455";
int i;
float fp;
sscanf( str, "%d", &i ); // 将字符串转换成整数 i = 15
sscanf( str, "%f", &fp ); // 将字符串转换成浮点数 fp = 15.455000
C标准库atoi等与itoa等函数(来源:<stdlib.h> or <cstdlib>)
1.用atoi函数将字符串(char)转换成数字*
//int atoi(char*);
string a = "1234";
const char *b = "1234";
char c[5]="1234";
int d = atoi(a.c_str());
int e = atoi(b);
int f = atoi(c);
/*
原型:long strtol(char* str, char** endptr, int base);
str:欲转换的字符串的起始地址;endptr:非法字符后的起始地址;base:将字符串按照base进制转换。
功能:把一个字符串以base进制转换成数字,将不能转换的部分存入endptr指向的地址。
*/
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol (szNumbers,&pEnd,10);
li2 = strtol (pEnd,&pEnd,16);
li3 = strtol (pEnd,&pEnd,2);
li4 = strtol (pEnd,NULL,0);
//其他的类似函数
//atoi
//atol
//atoll
//atof
//strtod
//strtof
//strtol
//strtold
//strtoll
//strtoul
//strtoull
2.用itoa函数将数字转换成字符串(char)*
- 注:itoa函数非标准函数
- 一个更标准的用法是采用sprintf(如上)
/*
原型:char* itoa(int value, char *str,int base);
value:欲转换的数字;str:目标字符串的地址;base:将数字转换成base进制的字符串。
功能:把一个数字转换成base进制的字符串。
*/
int num = 125;
char str[10];
itoa(num, str, 16);//str = 7d
//其他的类似函数
//itoa
//ltoa
//ultoa
//gcvt
//ecvt
C++的to_string与stoi等函数(来源:<string>)
1.用to_string函数将数字转换为字符串(string)
string to_string(T value);
2.用stoi等函数将字符串(string)转换为数字
/*
原型:int stoi(string str, size_t* idx = 0, int base = 10);
str:欲转换的数据;idx:目标字符串的起始转换地址;base:待转换数据的进制。
功能:把一个字符串按照base进制转换成数字,至str的第一个非法字符结束
*/
string str = "115.5xy";
int val = std::stoi(str,0,2);// val = 3
long val1 = std::stol(str);// val1 = 115
float val2 = std::stof(str);// val2 = 115.5
//其他类似函数
//stoi
//stol
//stoul
//stoll
//stof
//stod
//stold