一、stringstream
C++标准库中的<sstream>
提供了比ANSI C的<stdio.h>
更高级的一些功能,即单纯性、类型安全和可扩展性。
首先要加入头文件#include <sstream>
istringstream //用于执行c++风格的串流输入
ostringstream //用于执行c++风格的串流输出
stringstream //同时执行c++风格的串流输入输出
一般来说他都是用来进行类型转换
首先来看看sscanf()
我们用下面这一段代码来实现将字符类型转换为整型
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char s1[15]="123.456 789";
int a,c;
double b;
sscanf(s1,"%lf %d%n",&b,&a,&c);//c代表有几位转化了,此处有11位
cout << b << " " << a << " " << c << endl;
return 0;
}
再来看看ssprintf()
我们用下面这一段代码来实现将整型转换为字符类型
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char s1[15]={'0'};
int a=100;
sprintf(s1,"%d",a);//将a转换成字符类型
cout << s1 << endl;
sprintf(s1,"%x",a);//将a转化成小写16进制再转换成字符类型
cout << s1 << endl;
sprintf(s1,"%X",a);//将a转化成大写16进制再转换成字符类型
cout << s1 << endl;
sprintf(s1,"%o",a);//将a转化成8进制再转换成字符类型
cout << s1 << endl;
return 0;
}
除此之外ssprintf()还可以连接两个字符。
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char s2[15]="I love";
char s3[15]="you";
char s1[30];
sprintf(s1,"%s %s",s2,s3);
cout << s1 << endl;
return 0;
}
结果输出是 I love you
除了以上那些类型转换的方法外还可以用stringstream
将 整型转成字符类型
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
stringstream s1; //定义一流
string s2; //定义一字符串
int a; //定义一整书
cin >> a;
s1<<a; //将int型流入流内
s1>>s2; //转换类型
cout << s2 << endl;
return 0;
}
注意再进行多次转换的时候,必须清空stringstream一般用clear()
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
stringstream s1; //定义一流
string s2; //定义字符串string型
int a; //定义整型
cin >> a;
s1<<a;
s1>>s2; //int转string
cout << s2 << endl;
s1.clear(); //清除
cin >> a;
char s3[10]; //定义字符串char型
s1<<a;
s1>>s3; //int转char
cout << s3 << endl;
s1.clear(); //清除
s1<<true; //bool类型流入流
s1>>a;
cout << a << endl;
return 0;
}
1.将一个任意的类型转换到特定的目标类型
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
template<class T>
void zhuan(string & ss,const T & shu)
{
ostringstream os; //创建一个流
os<<shu; //把值存入流中
ss=os.str(); //将转换后的值给ss
}
int main()
{
string s1,s2,s3;
zhuan(s1,13.14); //double到string型转换
cout << s1 << endl;
zhuan(s2,520); //int到string型转换
cout << s2 << endl;
zhuan(s3,true); //bool到string型转换
cout << s3 << endl;
return 0;
}
2.任意类型之间的转换
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
template<class otype,class ivalue>
otype convert(const ivalue & t)
{
stringstream stream;//定义一流
stream<<t; //向流中传值
otype result; //存储转换结果
stream>>result; //向result中写入值
return result;
}
int main()
{
double d;
string sa;
string s="13.14";
d=convert<double>(s);//d等于13.14
cout << d << endl;
sa=convert<string>(520.0);//sa等于”520”
cout << sa << endl;
return 0;
}
希望多各位有帮助(^ω^)/
有不懂得欢迎留言