1、ostringstream:ostringstream 對象用來進行格式化的輸出,可以方便的將各種類型轉換爲string類型。ostringstream 只支持 << 操作符。
2、istringstream :istringstream 對象用來把一個已定字符串中的以空格隔開的內容提取出來。istringstream 只支持 >> 操作符。
3、stringstream: stringstream類就是上述istringstream和ostringstream類的綜合,支持<<, >>操作符,可以進行字符串到其它類型的快速轉換。
4、這幾個類istringstream, ostringstream, stringstream, 包含在 sstream 文件裏。
輸入方式:
1.構造函數。iss, oss, ss 都支持。istreamstring iss(Input), ostreamstring(Input), stringstream ss(Input)。
2.<< 操作符。oss, ss 支持。 oss << Input, ss << Input;
3.Str()函數,提供C中的字符串頭指針,或者匿名內存首地址
iss.str(Input.c_str()), iss.str(“abc 123 345”)
oss.str(Input.c_str()), oss.str(“abc 123 345”)
ss.str(Input.c_str()), ss.str(“abc 123 345”)
輸出方式:
1. 通過.str()得到一份拷貝
Str1 = iss.str(), Str1 = oss.str(), Str1 = ss.str();
顯然,這個也提供C語言的接口
printf(“%s”, iss.str().c_str()), printf(“%s”, oss.str().c_str()), printf(“%s”, ss.str().c_str())
2.>>操作符, iss和ss支持該操作
每次不同的使用時刻必須要清空,oss.clear() 並不能清空內存
ss.str(“”), iss.str(“”), oss.str(“”),暫時沒有發現其它的清空方法。
最大的用處
輸入string類型,可以通過iss 或 ss 類提取出來,功能類似於C語言中的sscanf()函數, 在TC中比較常見
提供字符串和各種類型之間的轉換。
//******* istringstream用法 **************************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
istringstream iss;
string istr1, istr2, istr3;
int a;
//輸入字符串
iss.str("I love C");
iss >> istr1 >> istr2 >> istr3;
cout << istr1 << " " << istr2 << " " << istr3 << endl;
// 字符串轉換爲int
iss.clear();
iss.str("1534");
iss >> a;
cout << a << endl;
//用C測試轉換
printf("%d\n", a);
return 0;
}
輸出:
I love C
1534
1534
//********* ostringstream用法 **********************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
ostringstream oss;
string ostr1, ostr2, ostr3;
string ostr;
string strFromInt;
string strFromDouble;
//輸出字符串
ostr1 = "My ";
ostr2 = "Name's ";
ostr3 = "C";
oss << ostr1;
oss << ostr2;
oss << ostr3;
cout << oss.str() << endl;
//int 轉化爲string
oss.str("");
oss << 23412;
cout << oss.str() << endl;
//double 轉化爲string
oss.str("");
oss << 1.2345;
cout << oss.str() << endl;
//將string型賦給char型。 關鍵:c_str函數的返回值是const char*的,不能直接賦值給char*,必須賦給const char*
const char *I = strFromInt.c_str();
const char *D = strFromDouble.c_str();
printf("%s,%s\n", I, D);
return 0;
}
輸出:
My Name’s C
23412
1.2345
//*********** stringstream *********************************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int a, b;
string Str1, Str2;
string Input = "abc 123 bcd 456 sss 999";
stringstream ss;
ss << Input;
while(ss >> Str1 >> a)
{
cout << Str1 << " " << a << endl;
}
}
輸出:
abc 123
bcd 456
sss 999
//*********** getline(cin, line) *********************************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string line, word;
while (getline(cin, line)) //getline(cin ,s) 讀取一行輸入的字符串,包括空格 字符串流是通過空格判斷一個字符串的結束
{
stringstream stream(line);
cout << stream.str() << endl;
while (stream >> word){ cout << word << endl; }
}
return 0;
}
輸入:1 2 3 4
輸出:
1 2 3 4
1
2
3
4
//********** 字符串流是通過空格判斷一個字符串的結束 **************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int val1 = 512, val2 = 1024;
stringstream ss;
ss << "val1: " << val1 << endl //“val1: "
<< "val2: " << val2 << endl;
cout << ss.str();
string dump;
int a, b;
ss >> dump >> a
>> dump >> b;
cout << a << " " << b << endl;
return 0;
}
輸出:
val1: 512
val2: 1024
512 1024
//************* ss.str("") *********************//
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
stringstream ss;
string s;
ss << "shanghai no1 school";
ss >> s;
cout << "size of stream = " << ss.str().length() << endl;
cout << "s: " << s << endl;
ss.str("");
cout << "size of stream = " << ss.str().length() << endl;
return 0;
}
輸出:
shanghai no1 school
size of stream = 19
s: shanghai
size of stream = 0