记录一下在做题时的一大重点,字符串和数值转换的方法
1、stringstream流转换
需导入头文件 #include <sstream>
既可以将字符串转换为数值,也可以将数值转换为字符串,但需要注意转换类型。关于字符串流的涉及转换的其它内容就不写了,只说下转换
#include <iostream>
#include <algorithm>
#include <sstream>//头文件
using namespace std;
int main() {
//字符串转换为数值,注意转换后的数值类型
string str1 = "123";
int num1;
stringstream ss1;
ss1 << str1;//入流
ss1 >> num1;//出流
cout << num1 << endl;
string str2 = "3.1456";
double num2;
stringstream ss2;
ss2 << str2;
ss2 >> num2;
cout << num2 << endl;
//以下为数值转换为字符串,相对就不需要怎么关注数值类型了
string str3;
double num3=255.255;
stringstream ss3;
ss3 << num3;
ss3 >> str3;
cout << str3 << endl;
return 0;
}
2、C++11新增函数转换
以下函数为C++11新增的函数,部分IDE需要勾选某些选项才能使用高版本的C++语法。string字符串转换为数值类型,就不说char数组了
- stoi(str),将字符串str转换为int
- stof(str),将字符串str转换为float
- stod(str),将字符串str转换为double
- stol(str),将字符串str转换为long
- stoll(str),将字符串str转换为long long
- stold(str),将字符串str转换为long double
- to_string(num),将数值类型num转换为字符串
提一句,以上字符串转数值的函数是可以规定转换范围的,也可以将n进制的字符串转换为10进制。
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
//字符串转换为数值
string str1 = "435";
int num1 = stoi(str1);
cout << num1 << endl;
string str2 = "435.435";
double num2 = stod(str2);
cout << num2 << endl;
//以下为数值转为字符串
int num3 = 124;
string str3 = to_string(num3);
cout << str3 << endl;
double num4 = 3.14;
string str4 = to_string(num4); //注意浮点型转换为字符串时会包括小数点后6位
cout << str4 << endl;
return 0;
}
3、题外话
使用C++做一些例如PAT等等有限制程序运行时间的算法题时,大家都知道scanf、printf是比cin、cout效率高很多的,有时候仅仅换一下,就从超时变成满分通过。但是当操作字符串string时,不能使用scanf("%s")、printf("%s")对string字符串进行输入输出,我就也记录下怎么使用scanf、printf输入和输出string字符串
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main() {
char chs[20];
printf("输入:");
scanf("%s", chs);
getchar();
string str = chs;//可以直接赋值
cout << str << endl;
printf("%s\n", str.c_str());//c_str()函数用于string转换为char,其实还可以指定转换范围
return 0;
}
string真是一用就上瘾,从此再无char[ ]字符数组