getline()函数

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

1)到文件结束,

2)遇到函数的定界符,

3)输入达到最大限度。

首先要明白设计getline函数的目的,其实很简单,就是从流中读取字符串。而且读取的方式有很多,包括根据限定符,根据已读取的字符的个数。从这个函数的名称来看,它的直观意义是从流中读取一行,但是大家不要被这表面的现象所迷惑。

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’留下一个位置。其他地方二者基本相同。
原理想必也很简单。每一次getline,文件指针都不断向下走,相当于不断的调用get函数并且将已经读取的字符保存下来。当遇到限定符或者已读取的字符个数达到了参数的要求(或者是由于文件的原因),那么便终止读取。如果是碰到了限定符,那么该字符便会被 extracted and discarded,也就是文件指针向下再移一位,但是并不保存该字符,也就是每次getline之后,文件指针会停留在限定符的后面(遇到限定符的情况)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值