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

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

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

扩展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

,
    推荐阅读
  • ceb格式如何转换成pdf(怎样把PUB文件转换成PDF格式)

    但是publisher并不支持直接转换为PDF,虽然它可以直接转换的RTF,DOC等格式,都是只能保留PUB文件中的文本,图片信息是要丢掉的。所以,最好办法还是转的PDF格式,不丢失原来的格式和内容。如果没有WPS,也可以装一个ADOBEACROBAT专业版的软件,使用其中的PDF打印功能。注意,打印机一定是PDF图1选择打用机为WPSPDF3、执行打印操作。)5、其实,转换时的一个重要操作,是要选择打印的PDF文件的存储路径。

  • 用什么方法摘柿子(如何摘柿子)

    下面更多详细答案一起来看看吧!选择要摘的柿子,将竹竿伸上去,在网口的位置围上一个柿子,然后用力的一拉,柿子就能落到网兜中了,这样操作起来很便利,尤其是对成熟的柿子特别好用。还可以摇树,如果柿子成熟了,摇晃树干,柿子就会掉下来,如果是太熟了掉地上会被砸坏,用第一种方法比较保险。

  • 王者荣耀怎样打特殊符号名字(王者荣耀特殊符号雪花怎么打)

    王者荣耀特殊符号雪花怎么打[海峡网]王者荣耀名字上代特殊符号雪花是怎么弄的?怎么在名字上加上特殊符号雪花?看到其他玩家个性名字,自己是不是也想弄一下呢?现在就将方法分享给大家特殊符号雪花怎么弄?有两种方法可以实现,可按照下面的。

  • 请为你的作品进行版权登记(请为你的作品进行版权登记)

    今天,我给大家推荐一个非常好的方式,保护自己的作品。所以我们既然打算做自媒体这个行业,首先一定要有版权保护的意识,千万不要只为别人做嫁衣了。

  • 材料物理专业是什么 材料物理专业是什么学位

    材料物理专业毕业的学生,既可从事材料物理基础理论研究,新材料、新工艺和新技术研发,生产技术开发和过程控制,材料应用等材料物理领域的科技工作,也可承担相关专业领域的教学、科技管理和经营工作。

  • 清淡粥怎么做(清淡粥制作教程)

    以下内容大家不妨参考一二希望能帮到您!清淡粥怎么做准备大米100克,皮蛋1个,猪瘦肉100克,淀粉、料酒、味精、葱末、盐、鸡粉各适量。大米洗干净,泡30分钟,入清水以大火煮沸,转小火慢煮45分钟,熬至粥成。猪肉切片,加入淀粉、料酒、味精腌15分钟;皮蛋去皮切丁。将皮蛋、猪肉、盐、鸡粉加入粥中煮15分钟,至汤汁黏稠时撒入葱末,出锅装碗。

  • 充电宝可以带上飞机吗国际航班(带充电宝坐飞机)

    】①充电宝严禁托运;②可随身或在手提行李中携带额定能量不超过100Wh的充电宝;③额定能量100Wh-160Wh的充电宝,须经航空公司批准且不得超过2个;③飞行中严禁使用充电宝。另外,请务必购买正规厂家生产、有3C标志的产品。通报称,事发后机组第一时间按程序妥善处置,迅速排除安全风险。已协助警方调查事件原因。现场图片显示,涉事航班客舱右边一靠窗座位,出现被黑烟熏过痕迹。

  • 糖不甩怎么来的 糖不甩为什么叫糖不甩

    糖不甩怎么来的清朝道光十九年,广东东莞东坑镇一带吸食鸦片之人甚多。初春二月二,由于流毒泛滥,民不聊生,赶往东坑过“卖身节”受财主雇佣的男丁精壮无几,大都是面黄肌瘦,劳力退减。但良药苦口,再者私自下凡,乃冒犯天条。众人吃后,果真杀住了鸦片流毒,体力、智力恢复。农历廿四节气倒背如流,东坑“糖不甩”因此而名扬远近。

  • 颜回的真实生平(颜回到底活了多大岁数)

    颜回到底活了多大岁数颜回像写一篇关于“复圣”颜回的文章,涉及到他的生卒年龄问题,犯起了嘀咕国学大家易中天先生做客“百家讲坛”讲《孔子评传》,将颜回的生卒认定为40岁;颇具权威性的上海辞书出版社1979年版的《辞海》,则界。

  • photoshopcs5无法新建文件(如何处理PhotoshopCS5软件无法安装的问题)

    为什么我只说CS5的安装问题处理方法,而不说其它版本?如果依然无法安装,可以尝试下删除注册表。然后再输入“Photoshop”进行搜索,搜索完成后把搜索到的所有“文件夹”全部删除,注意只删除文件夹即可!Windows7系统搜索方法同理,也是搜索所有磁盘,点击“计算机”图标进入后,直接在这里搜索所有磁盘,不用一个磁盘一个磁盘地去搜索:搜索完成后也是删掉所有含有“Adobe”和“Photoshop”字符的文件夹。