getline()函数
函数
2023-09-11 14:20:59 时间
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++编译器无法运行此默认转换。
如今通过程序来看一下:
先看全局函数:
输出是:![]()
![](//img-blog.csdn.net/20140712215449390?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmV0X3lpbmdqaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从函数声明中我们观察到两种函数声明的不同主要体如今參数的个数上。假设是两个參数的话,那么默认的限定符便是‘\n’了,可是假设声明了限定符,'\n'是否仍然有效呢?我写了例如以下程序做測试:
输出是:![](//img-blog.csdn.net/20140712215703093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmV0X3lpbmdqaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![]()
从中能够看出换行符确实失效了。所以getline函数的限定符仅仅有一个。是相互覆盖的。
再来看一下istream的getline函数:
输出是:![](//img-blog.csdn.net/20140712220251421?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmV0X3lpbmdqaWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
事实上istream的getline是在全局函数的getline函数的基础上。又多了一个终止读取的条件,即依据已读取的字符的个数来判定,实际上是读取n-1个字符。由于最后要为‘\0’留下一个位置。
其它地方二者基本同样。
原理想必也非常easy。每一次getline,文件指针都不断向下走,相当于不断的调用get函数而且将已经读取的字符保存下来。
当遇到限定符或者已读取的字符个数达到了參数的要求(或者是因为文件的原因),那么便终止读取。假设是碰到了限定符,那么该字符便会被 extracted and discarded。也就是文件指针向下再移一位,可是并不保存该字符,也就是每次getline之后,文件指针会停留在限定符的后面(遇到限定符的情况)。
相关文章
- HDU2189 悼念512汶川大地震遇难同胞——来生一起走 【母函数】
- PHP Error 和 Logging 函数
- Win10家庭版远程桌面 : 出现身份验证错误,要求的函数不受支持 可能是由于CredSSP加密Oracle修正
- Matlab中struct2table函数使用
- 第105章 Caché 函数大全 $ZF(-3) 函数
- 前端基础 - JavaScript高级应用(用变量操纵函数)
- 数组函数详解
- 《Node学习指南》一1.3 异步函数及Node事件循环
- 函数式编程-只用"表达式",不用"语句"()
- javascript变量提升/函数提升
- Node.js:模块系统、函数
- nginx源代码分析--ngx_http_optimize_servers()函数
- map 函数基本写法
- 练习 2-5 编写函数 any(s1, s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。