當前位置:
首頁 > 知識 > C++流類庫繼承體系(IO流,文件流,串流)和 字元串流的基本操作

C++流類庫繼承體系(IO流,文件流,串流)和 字元串流的基本操作

一、IO、流

數據的輸入和輸出(input/output簡寫為I/O)

對標準輸入設備和標準輸出設備的輸入輸出簡稱為標準I/O

對在外存磁碟上文件的輸入輸出簡稱為文件I/O

對內存中指定的字元串存儲空間的輸入輸出簡稱為串I/O

數據輸入輸出的過程,可以形象地看成流

從流中獲取數據的操作稱為「提取」(輸入)操作

向流中添加數據的操作稱為「插入」(輸出)操作

標準輸入輸出流

文件流

字元串流

二、流類庫繼承體系、四個輸入輸出對象

流庫具有兩個平行的基類:streambuf 和 ios 類,所有流類均以兩者之一作為基類

streambuf 類提供對緩衝區的低級操作:設置緩衝區、對緩衝區指針操作區存/取字元

ios_base、ios 類記錄流狀態,支持對streambuf 的緩衝區輸入/輸出的格式化或非格式化轉換

stringbuf:使用串保存字元序列。擴展 streambuf 在緩衝區提取和插入的管理

filebuf:使用文件保存字元序列。包括打開文件;讀/寫、查找字元

如下圖:

C++流類庫繼承體系(IO流,文件流,串流)和 字元串流的基本操作

C++為用戶進行標準I/O操作定義了四個類對象: cin,cout,cerr和clog


cin為istream流類的對象,代表標準輸入設備鍵盤,後三個為ostream流類的對象

cout代表標準輸出設備顯示器

cerr和clog含義相同,均代表錯誤信息輸出設備顯示器

三、ostream流 的操作,istream 流的操作

(一)、ostream流 的操作:

1、operator <<

<<操作返回一個ostream對象的引用,所以可以連續使用

2、put( )


輸出單個字元

返回一個ostream對象的引用

cout.put(『H』).put(『i』);

3、write( )


write(buf, len)

write( )返回一個ostream對象的引用

cout.write (buf, len) //char buf[len]

C++ Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <iostream>

using namespace std;

int main(void)

{

int n = 100;

int n2 = 200;

cout << n << " " << n2 << endl;

cout.put("H");

cout.put("i");

cout.put(" ");

cout.put("H").put("i").put("
");

char buf[] = "test!!!!!";

cout.write(buf, 5);

return 0;

}

(二)、istream流 的操作:

1、opeartor>>操作

<<操作返回一個ostream對象的引用,所以可以連續使用

2、get( )

get( )操作:


讀取單個字元

返回一個整數

字元的ASCII碼

get(char&)操作:


讀取單個字元

返回一個istream對象的引用

3、getline( )

讀取一行


遇到回車鍵

返回istream對象的引用

getline()操作與>>的區別:


char string1 [256],

cin.getline(string1, 256); //get a whole line, 以""結尾

cin >> string1; //stop at the 1st blank space

4、read( )

read(buf, len)

返回一個istream對象的引用

對空白字元(包括"
")照讀不誤

5、peek( ) 與 putpack()

peek:查看而不讀取

putback:將一個字元添加到流

C++ Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#include <iostream>

using namespace std;

int main(void)

{

//int n;

//char ch;

//cin>>n>>ch;

//cout<<"n="<<n<<" "<<"ch="<<ch<<endl;

//int ch = cin.get();

//cout<<ch<<endl;

//char ch1;

//char ch2;

//cin.get(ch1).get(ch2);

//cout<<ch1<<" "<<ch2<<endl;

char buf[10] = {0};

cin.getline(buf, 10);

cout << buf << endl;

//char buf[10] = {0};

//cin>>buf;

//cout<<buf<<endl;

//char buf[10] = {0};

//cin.read(buf, 5);

//cout<<buf<<endl;

/*char c[10], c2, c3;

c2 = cin.get( );

c3 = cin.get( );

cin.putback( c2 );

cin.getline( &c[0], 10);

cout << c << endl;*/

return 0;

}

二、字元串流的基本操作

istringstream,由istream派生而來,提供讀string的功能

ostringstream,由ostream派生而來,提供寫string的功能

stringstream,由iostream派生而來,提供讀寫string的功能

(一)、分割單詞

C++ Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#include <iostream>

#include <sstream>

using namespace std;

int main(void)

{

string line;

string word;

while (getline(cin, line))

{

istringstream iss(line);

while (iss >> word)

cout << word << "#";

cout << endl;

}

return 0;

}

C++流類庫繼承體系(IO流,文件流,串流)和 字元串流的基本操作

(二)、字元串與double 類型互相轉換

C++ Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#include <iostream>

#include <sstream>

using namespace std;

string doubletostr(double val)

{

ostringstream oss;

oss << val;

return oss.str(); // return string copy of character array

}

double strtodouble(const string &str)

{

istringstream iss(str);

double val;

iss >> val;

return val;

}

int main(void)

{

double val = 55.55;

string str = doubletostr(val);

cout << str << endl;

str = "123.123";

val = strtodouble(str);

cout << val << endl;

return 0;

}

(三)、實現類似sscanf, sprinft 的功能

C++ Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#include <iostream>

#include <sstream>

using namespace std;

int main(void)

{

//192,168,0,100;

//sscanf,sprintf;

//istringstream iss("192,168,0,100");

//int v1;

//int v2;

//int v3;

//int v4;

//char ch;

//iss>>v1>>ch>>v2>>ch>>v3>>ch>>v4;

//ch = ".";

//ostringstream oss;

//oss<<v1<<ch<<v2<<ch<<v3<<ch<<v4;

//cout<<oss.str()<<endl;

string buf("192,168,0,100");

stringstream ss(buf);

int v1;

int v2;

int v3;

int v4;

char ch;

ss >> v1 >> ch >> v2 >> ch >> v3 >> ch >> v4;

ch = ".";

stringstream ss2;

ss2 << v1 << ch << v2 << ch << v3 << ch << v4;

cout << ss2.str() << endl;

return 0;

}

輸出為192.168.0.100

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

spring整體架構
如何在伺服器里刪除用戶,添加用戶,更改用戶密碼

TAG:程序員小新人學習 |