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

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

,
    推荐阅读
  • 失业保险金要怎么才能领取(失业保险金还能这样领)

    经办机构应当受理,并根据失业人员累计参保缴费时间核定其领金期限,按照申请之日当地失业保险金标准,按月发放失业保险金。与此同时,对超过法定退休年龄但尚未依法享受基本养老保险待遇的参保失业人员,经办机构应在其办理失业登记后,按规定发放失业保险金。各地要严格执行社会保险法关于停止领取失业保险金的规定,非法定情形不得停发。

  • 迷你世界中怎么用传送器(迷你世界中如何用传送器)

    迷你世界中怎么用传送器?接下来我们就一起去了解一下吧!迷你世界中怎么用传送器传送器也就是传送卷轴,它的使用方法是,先在背包中找到它并点击,然后直接点击界面上那个手指就便可以了。要注意传送卷轴不能传送玩家骑着的坐骑,所以玩家可以传送回来,你所骑出去的坐骑是不能回来的,除非你按原路返回把它骑回来哦。《迷你世界》是一款高度自由的休闲类3D沙盒游戏,由深圳市迷你玩科技有限公司运营。

  • 悬崖村梯子简笔画(鸟窝树枝简笔画)

    悬崖村梯子简笔画你会画吗?梯子简笔画怎么画可爱的小梯子简笔画怎么画,下面来看看有没有你喜欢的悬崖村梯子简笔画?接下来我们一起去欣赏以下简笔画作品吧!悬崖村梯子简笔画梯子简笔画怎么画可爱的小梯子简笔画怎么画简笔画梯子的画法梯子简笔画图片教程梯子简笔画立体的梯子简笔画教程梯子简笔画卡通简笔画画木梯梯子简笔画怎么画梯子简笔画简单又好看梯子简笔画梯子简笔画

  • 微波炉清洗内部油垢小妙招(你知道吗)

    你知道吗先拿一口可以微波炉加热的小碗,里面加水,注意水不要放太多了,到时会溢出就麻烦了在碗里滴入几滴洗洁精,注意不是清水,里面加点洗洁精会让你清除得很容易更干净将碗放入微波炉中加热三分钟,注意,不要太久,这时。

  • 望庐山瀑布古诗直是什么意思(望庐山瀑布这首古诗的意思是)

    高崖上飞腾直落的瀑布好像有几千尺,让人恍惚以为银河从天上泻落到人间。飞流直下三千尺,疑是银河落九天。

  • 日月盈昃的昃怎么读(日月盈昃的意思)

    日月盈昃的昃怎么读日月盈昃的昃的拼音:[zè]。日月盈仄为太阳有正有斜月亮有缺有圆的传统天文学表述。谈到日月星象就进入了中国传统天文学的领域。中国的天文学不同于西方天文学,有自己独特的一套,是中国传统科技的一部分。日月是最容易观察的,同时也是与地球关系最密切的两个星体。因为,其一日月离我们距离近。中国人将日叫做太阳,把月叫做太阴,再加上金木水火土五个行星,就叫做七曜,或七政。

  • 神秘人飙车的(神秘媒体直播车)

    不过当天工作时专职驾驶员不在,为了调整微波信号,自己有幸在封闭场地内开了十几米,方向盘很轻盈,和自己平时代步的大众的电子助力方向盘有的一拼,手动变速箱档位也很清晰。应为后期的行业应用改装,车子被加了限速器,跑到100公里每小时的时候会开启限速。前排有三个座椅,限载两人。上车时,竟然没有个把手,专业改装厂家也有遗漏。改装进行中的图片,水果手机拍的,将就做个对比。

  • 抖音发图片怎么配音乐 抖音发图片怎么配音乐怎么说话

    抖音发图片配音乐的方法是:1、打开手机中的抖音APP,在首页中点击下方的拍摄按钮。

  • 莫言小说的地域性(莫言歌颂母亲的小说丰乳肥臀)

    另外还有一些鲁氏与不同男人为了怀孕而委身的细节,这些细节不仅真实而且有着很场景化的描述。无非是“丰乳肥臀”这四个字命名,其实本意是为了体现母亲生养子女的不易。莫言本人也坦言《丰乳肥臀》也是献给天下母亲的。

  • 金丝肉松饼的做法(金丝肉松饼的做法和配料)

    绿豆放高压锅大火烧开转小火,熟了即可,不要煮开花了。用筛网装绿豆,底下用一个盆装,用木勺积压,皮会和绿豆分开。