istringstream, ostringstream, stringstream的用法

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

另外可參考: istringstream, ostringstream, stringstream用法示例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章