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

数据结构进栈与出栈的代码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

,
    推荐阅读
  • 道达尔旗下有机油吗 道达尔机油是进口的吗

    道达尔拥有机油,道达尔也赞助一些比赛和车队。机油被称为发动机的血液。机油在发动机中不仅起到润滑的作用,还起到清洗、密封、缓冲、防锈、散热的作用。发动机运转时,机油会在发动机内各部件表面形成一层油膜,可以防止发动机内的部件直接接触而产生摩擦。如果发动机在过热状态下运转,会对发动机造成损害。机油使用时间长了性能会降低,所以需要定期更换机油。买机油和机油滤芯一定要选择大品牌的产品,一定要从正规渠道购买。

  • sha汤的sha字怎么写(sha汤的简介)

    SA汤是中国地方特色传统风味小吃,获得过山东省十大金牌旅游小吃、中国首届金牌旅游小吃称号,入选河南省非物质文化遗产,安徽省宿州市非物质文化遗产。清康熙年间《沂州志·秩》所列16种品中有“糁食”。饣它汤古称雉羹,为我国“天下第一羹”。雉羹至西周时,被定为宫廷八珍御膳之一。据《徐州方志》记载:雉羹所用主料为雌性锦鸡,佐以稷子米、生姜、精盐等。

  • 花店经营最难的是什么(花店商品到底该如何定价)

    花店商品到底该如何定价商业竞争是残酷的竞争与赌博的区别,便是理性和基于理性的竞争战略​一定价策略首先要有一定的浮动价格给顾客谈价的余地其次,鲜花店还要不断地根据市场、竞争对手策略的变化来定价,最后还要考虑顾客消费心理的变化。

  • 行测必备50个成语(事业单位言语理解)

    从他劝说主帅的话后来演变成了成语“骑虎难下”。因而骑虎难下含迫于形势不得不继续下去的含义,进退维谷不含这个意思。瑕不掩瑜,值得是瑕疵不能够掩盖玉石好的部分,强调优点,不构成反义,讳疾忌医,避讳疾病而不去看医生,指的是掩盖自己的缺点,与闻过则喜相反。

  • 君子与好学的关系(君子之好学问)

    君子与好学是相互关系。成为君子要经过不断地修炼打磨,让后天获得的文饰能够与质朴相得益彰,这个后天文采的修饰就是好学。孔子认为君子的好学,不仅体现在孜孜不倦的学习态度上,更表现为对正确方向和目标的坚守。“君子”是孔子的理想化的人格。君子以行仁、行义为己任。君子所追求的是正义的事业,是伟大的事业,这种事业可能成功,也可能失败。如何保持良好的精神状态,也是孔子所关注的问题。

  • 炝炒红菜苔(炝拌红菜薹的做法)

    冬季是红菜苔上市的季节,特别是霜打过后的红菜薹味道最好,吃起来非常嫩,还带有丝丝清甜的味道。红菜苔的最有名的做法是红菜薹炒腊肉,最家常的做法是清炒菜薹,而我今天却做个不一样的“炝拌红菜薹”。红菜薹尖摘成段,粗茎去除筋膜,中间切开,准备好的红菜薹焯水,再将油加热,炝一下红菜薹最后拌好。

  • 星字有寓意的男孩名字(带星字有寓意的男孩名字)

    星字有寓意的男孩名字「星众」众字意为多,许多;许多人。「广星」广字的含义主要是宽广,宏大。另外也有广泛、扩大之义。人名用政字,大多是组织出为国家政事效力等意义。「星昀」昀字意为日光。「烈星」烈字意为强,猛,旺盛,有功绩。意为壮烈、正直、刚毅英雄。「星鸣」鸣字意为本义禽兽或虫叫。后指表达意见、主张等。「耿星」耿字意指耳贴于颊,后引申为正直,直爽,光明,刚直等。

  • 我是余欢水什么时间更新(每周更新几集)

    在剧中,郭京飞将饰演一名“社畜”,阴差阳错成了见义勇为的英雄,到达人生巅峰。此次郭京飞所饰演的余欢水事业无成,经常被同事和老板欺辱,婚姻生活越来越糟,每天都会被老婆嫌弃厌恶,而且他的身体状况亮红灯,被查出身患绝症。在得知罹患癌症后,余欢水面对死亡性情大变,一次阴差阳错的见义勇为,使得他变成英雄,从此走上了反转人生。受打击的余欢水自此遵从本心不再妥协。

  • 魔道祖师大结局(魔道祖师简介)

    光瑶作恶多端,为了救蓝曦臣被凶尸聂明玦杀死。晓星尘自杀而死,魂魄碎片被薛洋收集起来了。聂怀桑是幕后大boss,真面目直到最后才被揭开。《魔道祖师》是墨香铜臭所写的一本仙侠小说,2015年10月31日开始连载,2016年3月1日完结。小说背景十分宏大,以魏无羡重生之事引出他与蓝忘机前尘今生的纠葛,并通过鬼手血案破解了聂明玦之死,揪出了幕后最大反派聂怀桑的故事。

  • 损坏电线怎么处理(一起了解一下)

    损坏电线怎么处理电线收拢在防护管中再藏到墙中。另外如果有一根线分为几根接线,而总线老化的情况,我们需要找到接线盒子,将接线盒子找到,打开后将分线盒总线全部抽出,再将新线换进去。所以如果电线全部被收拢在防护管中,那么当电线老化的时候不需要将水泥砸开,只要找到防护管开口即可。