最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月02日 16:05:06   作者:我是小白呀  
這篇文章主要介紹了C/C++中字符串流詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

概述

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

在這里插入圖片描述

字符串流

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

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

理解字符串流

我們是輸入是字符串形式, 存放在緩沖區(qū)內(nèi). 在數(shù)據(jù)內(nèi)部是以二進制的方式表示的. 所以輸出也是字符串形式的, 存儲在輸出緩沖區(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 指操作方式, 默認為ios::out方式

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

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

在這里插入圖片描述

輸入字符串流對象

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

istrstream::istrstream(char *buffer);
istrstream::istrstream(char *buffer, int n);
  • buffer 是指向字符數(shù)組首元素的指針, 用它來初始化流對象
  • n 是緩沖區(qū)大小, 可以用字符數(shù)組中的一部分

建立輸入字符串流對象:

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

輸入輸出字符串流對象

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

strstream::strstream(char *buffer, int n, int mode);
  • buffer 是指向字符數(shù)組首元素的指針
  • n 為指定的緩沖區(qū)的大小 (一般選與字符數(shù)組的大小相同)
  • mode 指操作方式, 默認為ios::out方式

舉個栗子:

char ch3[80];
strstream strio(ch3, sizeof(ch3), 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操作符,插入一個′\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 排序進行冒泡排序
    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

在這里插入圖片描述

字符數(shù)組 vs 文件

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

在這里插入圖片描述

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

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

總結(jié)

  • 通過字符串流從字符數(shù)組讀數(shù)據(jù)就如同從鍵盤讀數(shù)據(jù)一樣, 可以從字符數(shù)組讀入字符數(shù)據(jù), 也可以讀入整數(shù), 浮點數(shù)或其他類型數(shù)據(jù)
  • 同一字符數(shù)組可以先后與不同字符串流 (strin 或 strout) 建立關(guān)聯(lián). 分別對用一字符數(shù)組進行操作, 甚至可以對字符數(shù)組交叉進行讀寫
  • 用輸出字符串流向字符數(shù)組些數(shù)據(jù)時, 是從數(shù)組的首地址開始的, 因此更新了數(shù)組的內(nèi)容
  • 與字符串流關(guān)聯(lián)的字符數(shù)組并不一定是專為字符串流而定義的數(shù)組, 可以對該數(shù)組進行其他一般操作
  • 與字符串流關(guān)聯(lián)的字符數(shù)組相當于內(nèi)存中的臨時倉庫, 可以以 ASCII 形式存放各種類型的數(shù)據(jù), 在需要時再從中讀回來. 其他用法相當于標準設備 (顯示器與鍵盤), 同時具有諸多好處

到此這篇關(guān)于C/C++中字符串流詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++字符串流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 餐館點菜系統(tǒng)C語言源代碼

    餐館點菜系統(tǒng)C語言源代碼

    這篇文章主要為大家詳細介紹了餐館點菜系統(tǒng)C語言源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 巧妙使用RAII中的ScopeExit

    巧妙使用RAII中的ScopeExit

    Resource Acquisition Is Initialization,資源獲取即初始化,將資源的生命周期與一個對象的生命周期綁定,這篇文章主要介紹了巧妙使用RAII中的ScopeExit,需要的朋友可以參考下
    2021-05-05
  • C++ 超全面講解多態(tài)

    C++ 超全面講解多態(tài)

    這篇文章主要介紹了C++多態(tài)的原理與實現(xiàn),多態(tài)是一種面向?qū)ο蟮脑O計思路,本身和C++不是強綁定的,其他語言當中一樣有多態(tài),只不過實現(xiàn)的方式可能有所不同。下面來一起了解更多詳細內(nèi)容吧
    2022-04-04
  • 排列組合總結(jié):將結(jié)果進行輸出的實現(xiàn)方法

    排列組合總結(jié):將結(jié)果進行輸出的實現(xiàn)方法

    本篇文章關(guān)于排列組合的總結(jié),對結(jié)果進行輸出做了介紹。需要的朋友參考下
    2013-05-05
  • C++實現(xiàn)LeetCode(140.拆分詞句之二)

    C++實現(xiàn)LeetCode(140.拆分詞句之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(140.拆分詞句之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 淺析C++元組tuple類型

    淺析C++元組tuple類型

    元組tuple是C++的一個模板,不同tuple類型的成員類型也不相同,但是一個tuple可以有任意數(shù)量的成員,今天通過本文給大家介紹C++元組tuple類型,感興趣的朋友一起看看吧
    2022-06-06
  • C語言實現(xiàn)稀疏矩陣

    C語言實現(xiàn)稀疏矩陣

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)稀疏矩陣的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C語言單值二叉樹真題講解

    C語言單值二叉樹真題講解

    單值二叉樹你可能之前沒見過,如果二叉樹每個節(jié)點都具有相同的值,那么該二叉樹就是單值二叉樹,讓我們通過一個真題來深刻了解它吧
    2022-04-04
  • 在1個Matlab m文件中定義多個函數(shù)直接運行的操作方法

    在1個Matlab m文件中定義多個函數(shù)直接運行的操作方法

    這篇文章主要介紹了如何在1個Matlab m文件中定義多個函數(shù)直接運行,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • VScode中C++頭文件問題的終極解決方法詳析

    VScode中C++頭文件問題的終極解決方法詳析

    最近使用VSCode編譯C/C++時發(fā)現(xiàn)了問題,下面這篇文章主要給大家介紹了關(guān)于VScode中C++頭文件問題的終極解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08

最新評論

濉溪县| 常宁市| 施秉县| 大埔区| 辛集市| 松桃| 田东县| 莱西市| 高清| 宁化县| 镇原县| 太仆寺旗| 日喀则市| 武清区| 西城区| 宣城市| 新兴县| 廊坊市| 政和县| 五莲县| 怀安县| 若尔盖县| 湖口县| 诏安县| 锡林郭勒盟| 鄂托克旗| 青岛市| 历史| 静安区| 博客| 开封县| 安平县| 昌邑市| 新乐市| 临湘市| 尉犁县| 高安市| 措勤县| 逊克县| 始兴县| 柞水县|