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

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

,
    推荐阅读
  • 测一测你的名字和多少人相同(他测字捡出个死)

    光绪皇帝光绪说:“王”字有何说法?垂帘听政2、清代有一个测字先生外号“大不同”,光绪和宣统年间,在常州的城隍庙摆摊测字为生,名噪一时。她拈出了一个“青”字。慈禧太后3、传说梁启超找大不同测字问变法能持续多久。大不同说,既然测首字,事情就明了了,首字可拆成百、一加上二点,或者说一个倒八字。

  • 环保铅笔类型(河北沧县农民父子发明环保铅笔替代木铅笔)

    王殿钧历经一年多的钻研设计,第一代环保铅笔于1983年问世。王国樾说,经过反反复复试验,第三代环保铅笔自由耐久活芯铅笔研发成功,并在2000年分别获得了美国发明专利和德国实用新型专利。之后,第三代环保铅笔的升级版旋转出芯环保铅笔也研发成功,并于2016年获得国家实用新型专利。目前,王国樾又研制开发了一套环保铅笔组装机器,想更好地推广应用这项技术成果。

  • 英超新赛季传统六强展望切尔西篇(3人投入1.7亿欧清洗8000万水货)

    切尔西这两笔转会费已经花了9300万欧元。不过切尔西希望用一份8000万欧附加条款的方式说服勒沃库森放人,切尔西希望在7月份搞定这笔转会。如果切尔西真的以自己的方案拿下哈弗茨,那么球队在以上三人身上投入1.73亿欧了,在目前这个疫情阶段,切尔西的资金实力也会吃紧。不过球队也有卖人计划,首当其冲的是清洗凯帕。据悉切尔西已经在寻找新门将,为清洗凯帕做准备,如果有一份5000万英镑的报价,那么就可以带走他。

  • 蔷薇在东北怎么过冬 蔷薇在东北能过冬吗

    想让蔷薇在东北顺利过冬,最好将环境的温度控制在5-10度左右,在浇水的时候最好每隔1-2周进行一次,浇水后可以将蔷薇放在阳光充沛的地方,让植株接受不少于6小时的光照,维持蔷薇的正常生长。

  • 炭烧蔬菜怎么做(具体的步骤是什么)

    将烤箱上火调220度,下火调200度,放入粘玉米、番茄、胡萝卜、红椒、洋葱、南瓜,烤15—18分钟至原料成熟;平底锅加入10克橄榄油烧至微热,然后放入香菇、茄子、茭瓜,小火煎5分钟至熟。西兰花切成重约5克的小块,放入沸水中,加入2克盐、色拉油、味精,大火焯2分钟断生后捞出沥水备用。将所有的原料按照图片的造型摆好即可。

  • 富士康临时工工资是怎么发的(超额使用临时工)

    声明中称,临时工问题涉及到“整体产业淡旺季特性、用工结构等问题”,富士康正在与客户及供应链伙伴讨论,将逐步调整以更符合法规和实际需求规范。而在8月底一些学生返回学校后,临时工占比仍接近30%,依旧超出中国法律规定。富士康在声明中回应道,集团明确规定,实习生不得从事夜班及加班工作,并在8月份对此进行过稽核纠正。目前,集团并没有相关违规使用情况,实习生使用比例亦符合法律规定。

  • 金枝玉叶养多久能开花(养金枝玉叶不容易开花)

    金枝玉叶能不能开花金枝玉叶是马齿笕科的植物,原产于南非温暖干燥的地区,在那种恶劣的环境中也是能够正常开花的。冬天气温较低,植株已经停止生长,可以适当控制浇水,以免冻伤植株根系。当4~5月份时,可以每半个月给它施一次磷钾肥,以促使植株分化花芽,以利于开花。

  • 原装刹车油多久换一次(刹车油的作用是什么)

    原装刹车油多久换一次具体时间还是要看用户手册规定的周期,通常都是2年或者每行驶40000公里更换一次。由于刹车油储油壶上有通气孔,用来保证刹车油的容积变化,空气里含有水分或杂质会通过这个孔进入,会和里面的刹车油相混合,水分会被设车友吸收或溶解,因此含有水分的制动油沸点会降低。当制动系统的温度升高制动管路容易产生气阻,空气被压缩,从而造成制动力下降或制动失灵的可能。因此为了行车安全,刹车油必须定期更换。

  • 什么车能跑得过川崎h2(运动旅行车之王驾临)

    运动旅行车之王驾临2014年,集KHI川崎重工各种黑科技于一身的H2发布之后,宝贝虎就一直在猜测,川崎什么时候才能将全新的机械增压系统普及到更多车型上?终于在2017年的米兰展上,H2平台的衍生车型H2SX掀起了盖头,。

  • 炸河虾的正确做法大全(饭店的炸河虾好吃)

    说到河虾,河虾的做法也多种多样,有水煮小河虾,酥炸小河虾,葱油小河虾、爆炒小河虾。第二次炸虾,是为了把虾的外壳炸的脆脆的,这样吃起来口感好,而且不扎嘴。