C C 中字串流詳解及其作用介紹

2022-09-29 16:06:17 字數 2841 閱讀 8812

目錄

檔案流類和字串流類都是 ostream, istream 和 iostream 類的派生類, 因此對它們的操作方法是基本相同的.

檔案流字串流

概念檔案流是以外存檔案為輸入輸出物件的資料流

字串流也 稱為記憶體流, 以記憶體中使用者定義的字元陣列 (字串) 為輸入輸出的物件

相關流類

ifstream, ofstream 和 fstream

strstream

標頭檔案ifstream, ofstream 和 fstream

strstream

檔案流類和字串流類都是 ostream, istream 和 iostream 類的派生類, 因此對它們的操作方法是基本相同的.

我們是輸入是字串形式, 存放在緩衝區內. 在資料內部是以二進位制的方式表示的. 所以輸出也是字串形式的, 儲存在輸出緩衝區中.

#include

using namespace std;

int main()

輸出結果:

123.45 + 6789.10

123.45 6789.1 +

字串流類沒有open成員函式, 通過呼叫建構函式建立字串流物件.

ostream 類的建構函式的原型:

ostrstream::ostrstream(char *buffer, int n, int mode=ios::out);

建立輸出字串流物件並與字元陣列建立關聯:

char ch1[20];

ostrstream strout(ch1, 20);

istrstream 類的兩個帶參的建構函式, 原型為:

istrstream::istrstream(char *buffer);

istrstream::istrstream(char *buffer, int n);

建立輸入字串流物件:

char ch2[40];

istrstream strin(ch2); // 將字元陣列ch2中的全部資料作為輸入字串流的內容

istrstream strin(ch2,20); // 只將字元陣列ch2中的前20個字元作為輸入字串流的內容

strstream 類提供的建構函式的原型為:

strstream::strstream(char *buffer, int n, int mode);

舉個栗子:

char ch3[80];

strstream strio(ch3, sizeof(ch3), ios::in|ios::out);

寫字元陣列:

#include

#include

#include "student.h"

using namespace std;

int main( )

, ,

程式設計客棧 ,

};char c[50]; // 定義char陣列存放字元流

ostrstream strout1(c, 30);

for(int i = 0; i < 3; i++)

strout1 << stud[i].id << stud[i].name;

strout1 &lqrlwuupzit;< end程式設計客棧s; // ends是c++的i/o操作符,插入乙個′\0′

cout << "array c:" << c << endl;

ostrstream strout2(c, 40);

for(int i = 0; i < 3; i++)

strout2 << stud[i].id << " " << stud[i].name << " ";

strout2 << ends;

cout << "array c:" << c << endl;

return 0;

}輸出結果:

array c:1001little1002mid1003big

array c:1001 little 1002 mid 1003 big

以字串流為中介交換資料:

#include

#include

using namespace std;

int* bubble_sort(int array[10]);

void display(int array[10]);

int main()

// 除錯輸出

cout << "array a: ";

display(a);

cout << endl;

// 對陣列 a 排序進行氣泡排序

pt = bubble_sort(a);

// 輸出字串流

ostrstream strout(c, sizeof(c));

for (int i = 0; i < 10; ++i)

cout << "array c: " << c << endl;

return 0;

}輸出結果:

array c: 23 45 56 -23 -32 33 61 99 88 77

array a: 23 45 56 -23 -32 33 61 99 88 77

array c: -32 -23 23 33 45 56 61 77 88 99

輸出時資料不是流向外存檔案, 而是流向記憶體中的乙個儲存空間. 輸入時從記憶體中的儲存空間讀取資料.

字串流物件關聯的不是檔案, 而是記憶體中的乙個字元陣列. 因此不需要開啟和關閉檔案.

每個檔案的最後都有乙個檔案結束符, 表示檔案的結束. 而字元流所關聯的字元陣列中沒有相應的結束標誌. 使用者要指定乙個特殊字元 ends('\0') 作為結束符, 在向字元陣列寫入全部資料後要寫入此字元.

C C 中組合詳解及其作用介紹

目錄 組合 composition 指在乙個類中另一類的物件作為資料成員.在平面上兩點連成一條直線,求直線的長度和直線中點的座標.要求 dot 類 ifndef project5 dot h define project5 dot h include using namespace std clas...

C C 中虛函式詳解及其作用介紹

目錄 虛函式 virtual function 指可以被子類繼承和覆蓋的函式.基類宣告成員函式為虛函式的方法 virtual 型別 函式名 參數列列 注 在類外定義虛函式時,不需再加 virtual.虛函式的特點 通過關聯 binding 我們可以把乙個識別符號和乙個儲存位址聯絡起來,或者把乙個函式...

C C 中抽象類詳解及其作用介紹

目錄 抽象類 abstract class 是一些不用來定義物件程式設計客棧,而只作為基類被繼承的類.由於抽象類常用作基類,所以通常稱為抽象基類 abstract base class 定義抽象類的唯一目的,就是去建立派生類.我們在抽象類基礎上要定義出功能各異的派生類,再用這些派生類去建立物件.凡是...