今天开这个新专栏是为了帮助大家更好的入门C++。另外还有一个付费专栏是进阶的C++知识,之所以开付费,是想赚点钱,补贴一下家用,希望大家理解🙏🙏🙏
好,废话不多说,今天我们学一个和字符串有联系的一个知识——stringstream。
1.引例
首先我们来复习一下变量。变量就是用来装数据的容器,不同的数据类型要装在不同类型的容器中。
不同数据类型之间是可以进行转换的,比如把int盒子中的数据放到double类型的盒子中,那么数据就变成了double类型了,把int盒子中的数据放到了char类型的盒子中,就变成了char类型了。
int,double,char这三种数据类型之间都可以相互进行转换,可以使用自动类型转换或者强制类型转换
但是string是特殊的数据类型,那么string类型的数据如何与其他类型的数据进行转换呢?
比如图片中是两种不同包装的糖果,如果我们想把第一种包装的糖果换成第二种包装,需要几步呢?
1.打开第一种包装的糖果的包装纸,取出糖果
2.把糖果放到第二种包装的包装纸中
如果要把其他数据类型的数据与string类型数据进行转换,也是需要这样的步骤
1.把数据从其他数据类型的盒子中取出来
2.把取出来的数据重新放到string类型的盒子中
只是这中间的转换需要一个特殊的工具才能完成,这个特殊的工具就叫stringstream。
2.stringstream
给大家看一下stringstream的介绍:
stringstream是c++标准库提供的字符串流,作为定义字符串流的数据类型;
stringstream就像iostream一样,可以当做是存放数据的管道,可以把数据放入 管道中也可以从管道中读取数据
从iostream中读取数据到变量中是使用cin,把变量中的数据输出到iostream中 是使用cout 同样把数据放入stringstream和从stringstream中读取数据也需要类似cin cout 的工具
stringstream的使用
stringstream sin;
sin<<a;
sin>>b;
注意:需要头文件<sstream>!!!(当然,万能头文件包括他)
stringstream的应用
int类型转string类型:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//int转string
int a=20210323;
string s;
stringstream sin;//定义一个字符串流管道
sin<<a;//将int类型的数据放到管道中
sin>>s;//从管道中取出数据放到一个字符串变量中
cout<<s<<endl;
return 0;
}
我们看一下效果:
可能你看不出变化,但实际上他已经是一个字符串了。
当然,如果你想验证,可以再代码后面加上一点东西,比如:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//int转string
int a=20210323;
string s;
stringstream sin;//定义一个字符串流管道
sin<<a;//将int类型的数据放到管道中
sin>>s;//从管道中取出数据放到一个字符串变量中
cout<<s+"abc"<<endl;//加在这哦~
return 0;
}
运行:
因为只有字符串之间能拼接,所以20210323是个字符串。
string类型转int类型:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//string转int
string s="20210819";
int a;
stringstream sin;//定义一个字符串流管道
sin<<s;//将int类型的数据放到管道中
sin>>a;//从管道中取出数据放到一个字符串变量中
cout<<a<<endl;
return 0;
}
效果:
跟刚才一样的道理,我们在代码后面加点东西,检验一下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//string转int
string s="20210819";
int a;
stringstream sin;//定义一个字符串流管道
sin<<s;//将int类型的数据放到管道中
sin>>a;//从管道中取出数据放到一个字符串变量中
cout<<a+1<<endl;//加在这哦~
return 0;
}
运行:
因为只有int类型能进行加法,所以20210819是个数字。
在网上还找到了一个string转double和double转string的,给大家看看: