溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C/C++中字符串流有什么用

發(fā)布時(shí)間:2021-09-05 08:08:56 來源:億速云 閱讀:259 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下C/C++中字符串流有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

概述

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

C/C++中字符串流有什么用

字符串流


文件流字符串流
概念文件流是以外存文件為輸入輸出對象的數(shù)據(jù)流字符串流也 稱為內(nèi)存流, 以內(nèi)存中用戶定義的字符數(shù)組 (字符串) 為輸入輸出的對象
相關(guān)流類ifstream, ofstream 和 fstreamstrstream
頭文件ifstream, ofstream 和 fstreamstrstream

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

理解字符串流

我們是輸入是字符串形式, 存放在緩沖區(qū)內(nèi). 在數(shù)據(jù)內(nèi)部是以二進(jìn)制的方式表示的. 所以輸出也是字符串形式的, 存儲在輸出緩沖區(qū)中.

#include <iostream>
using namespace std;

int main() {
    double m, n;
    char op;

    cin >> m >> op >> n;
    cout << m << " " << n << " " << op;

    return 0;
}

輸出結(jié)果:

123.45 + 6789.10
123.45 6789.1 +

輸出字符串對象

字符串流類沒有open成員函數(shù), 通過調(diào)用構(gòu)造函數(shù)建立字符串流對象.

ostream 類的構(gòu)造函數(shù)的原型:

ostrstream::ostrstream(char *buffer, int n, int mode=ios::out);
  • buffer 是指向字符數(shù)組首元素的指針

  • n 為指定的緩沖區(qū)的大小 (一般選與字符數(shù)組的大小相同)

  • mode 指操作方式, 默認(rèn)為ios::out方式

建立輸出字符串流對象并與字符數(shù)組建立關(guān)聯(lián):

char ch2[20];
ostrstream strout(ch2, 20);

C/C++中字符串流有什么用

輸入字符串流對象

istrstream 類的兩個(gè)帶參的構(gòu)造函數(shù), 原型為:

istrstream::istrstream(char *buffer);
istrstream::istrstream(char *buffer, int n);
  • buffer 是指向字符數(shù)組首元素的指針, 用它來初始化流對象

  • n 是緩沖區(qū)大小, 可以用字符數(shù)組中的一部分

建立輸入字符串流對象:

char ch3[40];
istrstream strin(ch3);  // 將字符數(shù)組ch3中的全部數(shù)據(jù)作為輸入字符串流的內(nèi)容
istrstream strin(ch3,20);  // 只將字符數(shù)組ch3中的前20個(gè)字符作為輸入字符串流的內(nèi)容

輸入輸出字符串流對象

strstream 類提供的構(gòu)造函數(shù)的原型為:

strstream::strstream(char *buffer, int n, int mode);
  • buffer 是指向字符數(shù)組首元素的指針

  • n 為指定的緩沖區(qū)的大小 (一般選與字符數(shù)組的大小相同)

  • mode 指操作方式, 默認(rèn)為ios::out方式

舉個(gè)栗子:

char ch4[80];
strstream strio(ch4, sizeof(ch4), ios::in|ios::out);

案例一

寫字符數(shù)組:

#include <iostream>
#include <strstream>
#include "Student.h"
using namespace std;

int main( )
{
    // 定義數(shù)組
    Student stud[3]= {
            {1001, "Little"},
            {1002, "Mid"},
            {1003, "Big"},
    };

    char c[50];  // 定義char數(shù)組存放字符流
    ostrstream strout1(c, 30);
    for(int i = 0; i < 3; i++)
        strout1 << stud[i].id << stud[i].name;
    strout1 << ends; // ends是C++的I/O操作符,插入一個(gè)′\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;
}

輸出結(jié)果:

array c:1001Little1002Mid1003Big
array c:1001 Little 1002 Mid 1003 Big

案例二

以字符串流為中介交換數(shù)據(jù):

#include <iostream>
#include <strstream>
using namespace std;

int* bubble_sort(int array[10]);
void display(int array[10]);


int main() {
    // 定義數(shù)組
    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];
    }

    // 調(diào)試輸出
    cout << "array a: ";
    display(a);
    cout << endl;

    // 對數(shù)組 a 排序進(jìn)行冒泡排序
    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;
}

輸出結(jié)果:

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

C/C++中字符串流有什么用

字符數(shù)組 vs 文件

輸出時(shí)數(shù)據(jù)不是流向外存文件, 而是流向內(nèi)存中的一個(gè)存儲空間. 輸入時(shí)從內(nèi)存中的存儲空間讀取數(shù)據(jù).

C/C++中字符串流有什么用

字符串流對象關(guān)聯(lián)的不是文件, 而是內(nèi)存中的一個(gè)字符數(shù)組. 因此不需要打開和關(guān)閉文件.

每個(gè)文件的最后都有一個(gè)文件結(jié)束符, 表示文件的結(jié)束. 而字符流所關(guān)聯(lián)的字符數(shù)組中沒有相應(yīng)的結(jié)束標(biāo)志. 用戶要指定一個(gè)特殊字符 ends('\0') 作為結(jié)束符, 在向字符數(shù)組寫入全部數(shù)據(jù)后要寫入此字符.

以上是“C/C++中字符串流有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI