肥宅钓鱼网
当前位置: 首页 钓鱼百科

数据结构进栈与出栈的代码c语言(流类库继承体系)

时间:2023-07-11 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

扩展streambuf在缓冲区提取和插入的管理filebuf:使用文件保存字符序列。

一、IO、流

数据的输入和输出(input/output简写为I/O)

对标准输入设备和标准输出设备的输入输出简称为标准I/O

对在外存磁盘上文件的输入输出简称为文件I/O

对内存中指定的字符串存储空间的输入输出简称为串I/O

数据输入输出的过程,可以形象地看成流

从流中获取数据的操作称为“提取”(输入)操作

向流中添加数据的操作称为“插入”(输出)操作

标准输入输出流

文件流

字符串流

二、流类库继承体系、四个输入输出对象

流库具有两个平行的基类:streambuf 和 ios 类,所有流类均以两者之一作为基类

streambuf 类提供对缓冲区的低级操作:设置缓冲区、对缓冲区指针操作区存/取字符

ios_base、ios 类记录流状态,支持对streambuf 的缓冲区输入/输出的格式化或非格式化转换

stringbuf:使用串保存字符序列。扩展 streambuf 在缓冲区提取和插入的管理

filebuf:使用文件保存字符序列。包括打开文件;读/写、查找字符

如下图:

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]

CCode

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('\n');

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, 以'\0'结尾

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

4、read( )

read(buf, len)

返回一个istream对象的引用

对空白字符(包括'\n')照读不误

5、peek( ) 与 putpack()

peek:查看而不读取

putback:将一个字符添加到流

CCode

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的功能

(一)、分割单词

CCode

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;

}

(二)、字符串与double 类型互相转换

CCode

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 的功能

CCode

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

,
    推荐阅读
  • 补卡可以补到原卡号吗(补卡换卡就是这么简单)

    社保卡有效期为10年,建议社保卡到期前、当月养老金到账后尽快到就近的补换卡网点办理补换卡。目前我市涉及到快到期的部分社保卡为第二代社保卡。05社保卡到期若未及时更换有何影响?07社保卡金融优惠政策有哪些?

  • 三十六计实例讲解(三十六计有趣的日常应用)

    《三十六计》,大家耳熟能详,并且能叫出来常见的几种计策名称,玩儿“三国杀”的更是见过36计中的大部分计谋名称。其中我们很多计谋都在各种场景里见过,特别是“三国”里面用得最多,然后我们看一下《三十六计》在我们现代生活中的应用吧。因此我建议大家都读读《三十六计》这本真正的国粹!国外都在研究我们的《三十六计》,何况我们自己呢。

  • 车被夹在中间怎么出库(前后被夹 如何出库)

    两辆车之间的距离取决于停车位的长度和路面的宽度。右倒车后入库,直到车右前角接近前车左后角。车被开走不归还如何销户车被开走不归还,可以向公安机关报案或者起诉取回。如果账户关闭,需要办理注销登记,到交管局注销丢失的账户。所需资料包括机动车行驶证和登记证、机动车所有人身份证明、机动车遗失的遗失证明、在国内未使用的出境证明或者因质量原因的退货证明。

  • 宝宝流口水吐泡泡是肺炎嘛(宝宝时常口吐泡泡)

    宝宝时常口吐泡泡“本文由孕育岛原创,欢迎个人转发和分享”昨天与好友聊天得知,她家宝宝最近几天老是嘴里吐泡泡好友笑着表示:孩子吐泡泡太可爱了,像只小螃蟹当我继续询问是否有其他症状时,朋友想了半天,回忆起宝宝一天中能偶尔。

  • 如何进行科学睡眠 科学合理的睡眠

    失眠者,多是生物钟发生紊乱造成的。一般认为枕头的高度,必须与人的一侧肩膀的宽度相仿。正常人的颈椎骨具有向前微凸的生理性弯曲,枕头必须适合颈椎的弯曲度,才能使颈部肌肉松弛,肺部呼吸通畅,脑部血液供应正常,保持睡眠具有充分的舒适感。

  • 小说女犯人成为我的私兵(小说深夜他被神秘势力盯上)

    短短片刻后,李道然的手下便已立毙了七八条人命。这些魔修可谓是修仙者的天敌,至少李道然对他们是没有一丝一毫的好感。现如今,东洲与十万里魔疆的接壤地带,无时无刻不是在发生着血战。然而他们却是不知道,李道然绝对是元婴期。最后一个飞出去了一百米,便被李道然后来居上,一脚踹死。那第二道身影,在六百多米后被李道然追上,一手便扭断了其脖颈,尸体如同破布袋般坠落而下。

  • 交通安全知识小讲堂第一部分(交通安全知识集锦交通安全知识)

    道路中间长长的黄色或白色直线,叫“车道中心线”。中心线两侧的白色虚线,叫“车道分界线”,它规定机动车在机动车道上行驶。非机动车在非机动车道上行驶。行人护栏是用来保护行人安全,防止行人横马路走入车行道和防止车辆驶入人行道的。隔离墩或绿化隔离带是设在车行道上用来隔机动车与非机动车或来往车辆的。红灯是停止信号,绿灯是通行信号。这些标志对于安全车非常重要,被称为“永不下岗的交通警”。

  • 刮痧排肝毒吗 刮痧排毒么

    4、有出血倾向者,如糖尿病晚期、严重贫血、白血病、再生障碍性贫血和血小板减少患者不要中医刮痧疗法。

  • 发生地震时正确的做法(地震时应该怎么办)

    地震时如果房屋倒塌,应呆在床下或桌下千万不要移动,要等到地震停止再进出室外或等待救援。最安全、最有效的办法是,及时躲到两个承重墙之间最小的房间,如厕所、厨房等。如果正在上课时发生了地震,不要惊慌失措,更不能在教室内乱跑或争抢外出。如果己经离开房间,千万不要地震一停就立即回屋取东西。因为第一次地震后,接着会发生余震,余震对人的威胁会更大。如果在公共场所发生地震,不能惊慌乱跑。

  • 地球历史方面有什么书籍(盘点地球认识史)

    与“自然地球”相对,本书称其为“人文地球”,讲述了人类在认识地球过程中的科学故事和文明史故事。自然地球与人文地球进入文明社会以后,地球有了另外一种容貌,我们称之为“人文地球”。人文地球更像是万花筒,在历史长河中不断变化、丰富多彩。这个时期进入了科学时代,人文地球迅速分化为多门独立的学科,并最终成为一个知识体系。