peek 成员函数与 get 类似,但有一个重要的区别,当 get 函数被调用时,它将返回输入流中可用的下一个字符,并从流中移除该字符;但是,peek 函数返回下一个可用字符的副本,而不从流中移除它。

因此,get() 是从文件中读取一个字符,但 peek() 只是"看"了下一个字符而没有真正读取它。为了更好地理解这种差异,假设新打开的文件包含字符串 "abc",则以下语句序列将在屏幕上打印两个字符 "ab":

char ch = inFile.get () ; // 读取一个字符

cout << ch;    //输出字符

ch = inFile.get () ; // 读取另一个字符

cout << ch; //输出字符

但是,以下语句则将在屏幕上打印两个字符 "aa":

char ch = inFile.peek () ; //返回下一个字符但是不读取它

cout << ch;    //输出字符

ch = inFile.get () ; //现在读取下一个字符

cout << ch; //输出字符

当需要在实际阅读之前知道要读取的数据类型时,peek 函数非常有用,因为这样就可以决定使用最佳的输入方法。如果数据是数字的,最好用流提取操作符 >> 读取,但如果数据是非数字字符序列,则应该用 get 或 getline 读取。

下面的程序使用 peek 函数通过将文件中出现的每个整数的值递增 1 来修改文件的副本:

// This program demonstrates the peek member function.、

#include

#include

#include

using namespace std;

int main()

{

// Variables needed to read characters and numbers

char ch;

int number;

// Variables for file handling

string fileName;

fstream inFile, outFile;

// Open the file to be modified

cout << "Enter a file name: ";

cin >> fileName;

inFile.open(fileName.c_str(), ios::in);

if (!inFile)

{

cout << "Cannot open file " << fileName;

return 0;

}

// Open the file to receive the modified copy

outFile.open("modified.txt", ios::out);

if (!outFile)

{

cout << "Cannot open the outpur file.";

return 0;

}

// Copy the input file one character at a time except numbers in the input file must have 1 added to them

// Peek at the first character

ch = inFile.peek();

while (ch != EOF)

{

//Examine current character

if (isdigit(ch))

{

// numbers should be read with >>

inFile >> number;

outFile << number + 1;

}

else

{

// just a simple character, read it and copy it

ch = inFile.get();

outFile << ch;

}

// Peek at the next character from input file

ch = inFile.peek();

}

// Close the files

inFile.close();

outFile.close ();

return 0;

}

程序测试文件内容:

Amy is 23 years old. Robert is 50 years old. The difference between their ages is 27 years. Amy was born in 1986.

程序输出结果:

Amy is 24 years old. Robert is 51 years old. The difference between their ages is 28 years. Amy was born in 1987.

该程序事先无法知道下一个要读取的字符是一个数字还是一个普通的非数字字符(如果是数字,则应该使用流提取操作符 >> 来读取整个数字;如果是字符,则应该通过调用 get() 成员函数来读取)。

因此,程序使用 peek() 来检查字符而不实际读取它们。如果下一个字符是一个数字,则调用流提取操作符来读取以该字符开头的数字;否则,通过调用 get() 来读取字符并将其复制到目标文件中。

peek在c语言中的作用,C++ peek函数用法详解相关推荐

  1. C语言中的字符串转数字函数常见问题详解

    目录 C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 字符串转长整形 strtol函数, C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型: int a ...

  2. python中count的作用_python count函数用法详解

    在python中可以使用"count()"函数统计字符串里某个字符出现的次数,该函数用于统计次数,其语法是"count(sub, start= 0,end=len(str ...

  3. python中isinstance怎么用_pythonisinstance函数用法详解

    这篇文章主要介绍了python isinstance函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 isinstance() 函数来判断 ...

  4. peek在c语言中的作用,聚醚醚酮(PEEK)材料用于颅骨修补优点有哪些

    颅骨缺损这样的问题在我们的生活中已经变得越来越常见了,很多的人因为一些外伤.交通事故或者疾病等因素导致颅骨缺损.颅骨缺损会引发很多的不适症状,如患者会经常头晕.恶心,严重影响着患者的生活和健康,所以一 ...

  5. python map函数的作用_python map函数用法详解

    原博文 2018-05-02 16:24 − python中的map()函数是一个内置的高阶函数,一般用法是map(function, iterable).需要传入一个函数,这个函数可以是内置的,也可 ...

  6. R语言中如何计算C-Statistics?几种计算方法详解

    R语言中如何计算C-Statistics?几种计算方法详解 目录 R语言中如何计算C-Statistics? #包导入 #数据加载编码

  7. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  8. java return返回值_java中关于return返回值的用法详解

    我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就re ...

  9. c语言fputc输入字符串,C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    C语言fgetc和fputc函数用法详解(以字符形式读写文件),文件,字符,指针,函数,字节 C语言fgetc和fputc函数用法详解(以字符形式读写文件) 易采站长站,站长之家为您整理了C语言fge ...

最新文章

  1. 什么是php递归算法_PHP递归算法(一)
  2. 分类算法-支持向量机(SVM)
  3. HUST 1555 A Math Homework
  4. c c++ 函数内数组初值_C编程基础-关键字-函数和指针
  5. 浏览器的同源策略与跨域
  6. 一步步编写操作系统80 扩展内联汇编1
  7. Ubuntu18.04应用程序安装集锦
  8. python附件发送到邮箱里_使用python将最新的测试报告以附件的形式发到指定邮箱...
  9. 现在的手机电池为什么不可拆卸?真相太真实了...
  10. 数千万智能手机集体脱机?罪魁祸首是……
  11. CCF201609-3 炉石传说(100分)
  12. 没有DOI,只有卷期号时的IEEE期刊论文查找方法
  13. tlac100怎么添加ap_如何设置AC功能管理无线AP
  14. NXP与STM32单片机程序架构
  15. java 项目的部署方案
  16. UIAccelerometer 加速计(iOS5之前)
  17. MKR基于知识图谱的推荐算法
  18. 北京市高等教育自学考试2023年教材信息表
  19. 亚马逊电商数据自动化管理接口平台ProductType格式展示
  20. 初级程序员 高级程序员_程序员的十大电影

热门文章

  1. PS获取图片三种方式
  2. 做开发3年,字节跳动二面JVM底层被问得哑口无言
  3. web实现置顶、置底功能、聊天页面、锚点、滚动条、vue、scrollTop、scrollIntoView、scrollHeight
  4. 头歌 MongoDB 文档的高级查询操作(全部关卡)
  5. vassonic PHP,轻量级、高性能的 VasSonic 框架,听说开源了?
  6. 终端、控制台、虚拟终端、伪终端的概念,阐述终端与shell的关系
  7. Testin融资后首个举措:推出O2O一站式测试服务
  8. 物联网产业前景看涨然5大挑战在眼前
  9. STM32 内部Flash读写 程序源码 [已验证]
  10. [WUSTCTF2020]level3 笔记与自省