您好,登錄后才能下訂單哦!
小編給大家分享一下C/C++中字符串流有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
文件流類和字符串流類都是 ostream, istream 和 iostream 類的派生類, 因此對它們的操作方法是基本相同的.
文件流 | 字符串流 | |
概念 | 文件流是以外存文件為輸入輸出對象的數據流 | 字符串流也 稱為內存流, 以內存中用戶定義的字符數組 (字符串) 為輸入輸出的對象 |
相關流類 | ifstream, ofstream 和 fstream | strstream |
頭文件 | ifstream, ofstream 和 fstream | strstream |
文件流類和字符串流類都是 ostream, istream 和 iostream 類的派生類, 因此對它們的操作方法是基本相同的.
我們是輸入是字符串形式, 存放在緩沖區內. 在數據內部是以二進制的方式表示的. 所以輸出也是字符串形式的, 存儲在輸出緩沖區中.
#include <iostream> using namespace std; int main() { double m, n; char op; cin >> m >> op >> n; cout << m << " " << n << " " << op; return 0; }
輸出結果:
123.45 + 6789.10
123.45 6789.1 +
字符串流類沒有open
成員函數, 通過調用構造函數建立字符串流對象.
ostream 類的構造函數的原型:
ostrstream::ostrstream(char *buffer, int n, int mode=ios::out);
buffer 是指向字符數組首元素的指針
n 為指定的緩沖區的大小 (一般選與字符數組的大小相同)
mode 指操作方式, 默認為ios::out
方式
建立輸出字符串流對象并與字符數組建立關聯:
char ch2[20]; ostrstream strout(ch2, 20);
istrstream 類的兩個帶參的構造函數, 原型為:
istrstream::istrstream(char *buffer); istrstream::istrstream(char *buffer, int n);
buffer 是指向字符數組首元素的指針, 用它來初始化流對象
n 是緩沖區大小, 可以用字符數組中的一部分
建立輸入字符串流對象:
char ch3[40]; istrstream strin(ch3); // 將字符數組ch3中的全部數據作為輸入字符串流的內容 istrstream strin(ch3,20); // 只將字符數組ch3中的前20個字符作為輸入字符串流的內容
strstream 類提供的構造函數的原型為:
strstream::strstream(char *buffer, int n, int mode);
buffer 是指向字符數組首元素的指針
n 為指定的緩沖區的大小 (一般選與字符數組的大小相同)
mode 指操作方式, 默認為ios::out
方式
舉個栗子:
char ch4[80]; strstream strio(ch4, sizeof(ch4), ios::in|ios::out);
寫字符數組:
#include <iostream> #include <strstream> #include "Student.h" using namespace std; int main( ) { // 定義數組 Student stud[3]= { {1001, "Little"}, {1002, "Mid"}, {1003, "Big"}, }; char c[50]; // 定義char數組存放字符流 ostrstream strout1(c, 30); for(int i = 0; i < 3; i++) strout1 << stud[i].id << stud[i].name; strout1 << ends; // 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 <iostream> #include <strstream> using namespace std; int* bubble_sort(int array[10]); void display(int array[10]); int main() { // 定義數組 char c[50] = "23 45 56 -23 -32 33 61 99 88 77"; int a[10], *pt; // 輸入字符串流 cout << "array c: " << c << endl; istrstream strin(c, sizeof(c)); for (int i = 0; i < 10; i++) { strin >> a[i]; } // 調試輸出 cout << "array a: "; display(a); cout << endl; // 對數組 a 排序進行冒泡排序 pt = bubble_sort(a); // 輸出字符串流 ostrstream strout(c, sizeof(c)); for (int i = 0; i < 10; ++i) { strout << *(pt+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++中字符串流有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。