一、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;
}
希望多各位有幫助(^ω^)/
有不懂得歡迎留言