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

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

,
    推荐阅读
  • 2022西溪湿地免费门票预约(西溪湿地门票优惠政策2021)

    根据防控疫情要求,请主动佩戴口罩,配合体温检测,查验健康码和行程码,有序排队入园。

  • 夏黑葡萄摘心技术(夏黑葡萄种植技术)

    夏黑葡萄摘心技术夏黑葡萄原本是产自日本的,因其较好的口感,浓郁的口味,以及高于其他品种的糖分而被国人所喜爱。近年来国内的夏黑产量也在不断的增长。但是很多农户都会在种植夏黑葡萄的时候出现很多的问题,导致产量过低或是品质不好。接下来就从建园选址、肥料施加、后期养护几个方面来具体讲述夏黑葡萄的种植技术。

  • 西巴老马什么意思(西巴拉马什么意思)

    西巴老马是韩文的中文音译,意思是表示对某一事件或者某一事物感到惊奇、震惊、愤怒时而说出的感叹,属于发泄情感的词语。韩国的官方语言是韩国语。韩语属于黏着语,历史上曾用汉字标记,并且将汉语融入其词汇,汉字曾在韩国长期占据主流文字的地位。1446年10月,朝鲜王朝第四代君主世宗大王颁布《训民正音》,标志着韩文的诞生,自此结束韩国没有自己文字、借用中国汉字进行标记的历史。

  • 第五人格十三赛季五阶段位重置(别样的温暖陪伴第五人格第十八赛季推理之径更新)

    排位珍宝也将全面上新,包括"使徒"稀世随身物品"宽恕"、魔术师奇珍随身物品"机关囚笼"和玩具商奇珍随身物品"皮纳塔"等。网易首款1V4非对称竞技手游《第五人格》第十八赛季即将开启,全新推理之径和排位珍宝惊喜上新,让我们一起,闪耀舞台!玩家将扮演侦探奥尔菲斯,在收到一封神秘的委托信后,进入恶名昭著的庄园调查一件失踪案。在进行证据调查过程中,玩家扮演的奥尔菲斯将采用演绎法,对案情进行回顾。

  • 倡条冶叶是什么意思(词语倡条冶叶是什么意思)

    我们一起去了解并探讨一下这个问题吧!倡条冶叶是什么意思倡条冶叶,汉语成语,拼音是chāngtiáoyěyè,意思是任人玩赏攀折的花草枝叶,借指妓女。

  • 如何制作泡椒凤爪(有什么制作的步骤)

    下面更多详细答案一起来看看吧!如何制作泡椒凤爪准备配料:鸡爪剁成三块。将泡椒倒入碗中,放入鸡爪、大蒜、白糖、鸡精、盐,倒入白醋和纯净水拌匀即可。

  • 狼群能打败牧羊犬吗(为什么狼群不敢攻击有牧羊犬保护的羊群)

    早期的牧羊犬主要用来看护牧场,防止牲畜被野兽吃掉或者被小偷盗窃。喜乐蒂牧羊犬喜乐蒂牧羊犬外形与苏格兰牧羊犬类似,但体型要小一些,看起来聪明小巧,对主人漂亮忠实,感情深厚,但对陌生人警惕性较强。牧羊犬不仅能维持牲畜的秩序,很好能时刻警惕狼或者重等猛兽的侵犯,甚至与狼正面较量,将其驱逐,以免羊群被攻击。牧场主饲养牧羊犬的目的,除了让牧羊犬看护羊群以外,防止狼群对羊群的侵扰也是重中之重。

  • 冻豆腐可以保存多久(冻豆腐存放时间)

    以下内容大家不妨参考一二希望能帮到您!冻豆腐可以保存多久冻豆腐可以放很长时间的,密封的好放冰箱的话可以放一年以上。新豆腐经过冷冻,内部组织结构发生了变化,其形态呈蜂窝状,颜色变灰,但蛋白质、维生素、矿物质破坏较少。豆腐经过冷冻,能产生一种酸性物质,这种酸性物质能破坏人体的脂肪,如能经常吃冻豆腐,有利于脂肪排泄,使体内积蓄的脂肪不断减少,达到减肥的目的。冻豆腐具有孔隙多、营养丰富、热量少等特点。

  • 2022年亚运会吉祥物 2022年亚运会吉祥物介绍

    2022年亚运会吉祥物分别为宸宸、琮琮、莲莲。吉祥物是一组名为“江南忆”的机器人。“琮琮”代表世界遗产良渚古城遗址,“莲莲”代表世界遗产西湖,“宸宸”代表世界遗产京杭大运河。亚运会吉祥物是专门为亚运会而设立的吉祥物,每个吉祥物都是独一无二的,它们都有富有活力的性格,体现友谊和公平竞赛的精神。

  • ddos攻击的概念(Linux下防御DDOS攻击的操作梳理)

    此时老板将饭店营业规模扩大,该饭店可同时容纳1万人就餐,5000人同时来捣乱饭店营业也不会受到影响。通常NTP服务使用UDP123端口提供标准服务。2009年7月,韩国主要网站三天内遭遇三轮猛烈的DDOS攻击,韩国宣布提前成立网络司令部。随后名为DERP的黑客组织声称对此次大规模的DDoS攻击行动负责。