博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getline()函数
阅读量:7239 次
发布时间:2019-06-29

本文共 1075 字,大约阅读时间需要 3 分钟。

getline()函数会生成一个包括一串从输入流读入的字符的字符串,直到下面情况发生会导致生成的此字符串结束。

1)到文件结束,

2)遇到函数的定界符。

3)输入达到最大限度。

首先要明确设计getline函数的目的,事实上非常easy。就是从流中读取字符串。

并且读取的方式有非常多,包含依据限定符,依据已读取的字符的个数。

从这个函数的名称来看,它的直观意义是从流中读取一行,可是大家不要被这表面的现象所迷惑。

C++中有两个getline函数,一个是在string头文件里,定义的是一个全局的函数。函数声明是istream& getline ( istream& is, string& str, char delim )与istream& getline ( istream& is, string& str );
还有一个则是istream的成员函数。函数声明是istream& getline (char* s, streamsize n )与istream& getline (char* s, streamsize n, char delim );注意第二个getline是将读取的字符串存储在char数组中而不能够将该參数声明为string类型,由于C++编译器无法运行此默认转换。
如今通过程序来看一下:
先看全局函数:
     
输出是:
从函数声明中我们观察到两种函数声明的不同主要体如今參数的个数上。假设是两个參数的话,那么默认的限定符便是‘\n’了,可是假设声明了限定符,'\n'是否仍然有效呢?我写了例如以下程序做測试:
     
    
输出是:
从中能够看出换行符确实失效了。所以getline函数的限定符仅仅有一个。是相互覆盖的。
再来看一下istream的getline函数:
     
输出是:
事实上istream的getline是在全局函数的getline函数的基础上。又多了一个终止读取的条件,即依据已读取的字符的个数来判定,实际上是读取n-1个字符。由于最后要为‘\0’留下一个位置。

其它地方二者基本同样。

原理想必也非常easy。每一次getline,文件指针都不断向下走,相当于不断的调用get函数而且将已经读取的字符保存下来。

当遇到限定符或者已读取的字符个数达到了參数的要求(或者是因为文件的原因),那么便终止读取。假设是碰到了限定符,那么该字符便会被 extracted and discarded。也就是文件指针向下再移一位,可是并不保存该字符,也就是每次getline之后,文件指针会停留在限定符的后面(遇到限定符的情况)。

你可能感兴趣的文章
【转载】小小的公共库,大大的耦合,你痛过吗?
查看>>
图的遍历(深度优先搜索法和广度优先搜索法)
查看>>
在线更新问题 HDU5877 线段树
查看>>
[转] 深入浅出mongoose-----包括mongoose基本所有操作,非常实用!!!!!
查看>>
CSS创建三角形(小三角)的几种方法
查看>>
Python简单基础小程序
查看>>
Python 购物车练习 2.0
查看>>
Hdoj 4089
查看>>
mikadonic-03-NIS+NFS+Autofs
查看>>
CSS单位解释.
查看>>
JAVA进阶18
查看>>
转 如何在secureCRT上设置常用的快捷输出按钮栏听语音
查看>>
转 Docker Swarm vs Kubernetes
查看>>
47-使用列表进行模拟栈
查看>>
Myisam和innodb 和memory的区别
查看>>
.Net 特性 attribute 学习 ----自定义特性
查看>>
vue如何加入百度联盟广告
查看>>
react中实现搜索结果中关键词高亮显示
查看>>
JQuery的过滤选择器
查看>>
C# Http POST get
查看>>