C++ peek函数用法详解
peek 成员函数与 get 类似,但有一个重要的区别,当 get 函数被调用时,它将返回输入流中可用的下一个字符,并从流中移除该字符;但是,peek 函数返回下一个可用字符的副本,而不从流中移除它。
因此,get() 是从文件中读取一个字符,但 peek() 只是"看"了下一个字符而没有真正读取它。为了更好地理解这种差异,假设新打开的文件包含字符串 "abc",则以下语句序列将在屏幕上打印两个字符 "ab":
下面的程序使用 peek 函数通过将文件中出现的每个整数的值递增 1 来修改文件的副本:
因此,程序使用 peek() 来检查字符而不实际读取它们。如果下一个字符是一个数字,则调用流提取操作符来读取以该字符开头的数字;否则,通过调用 get() 来读取字符并将其复制到目标文件中。
因此,get() 是从文件中读取一个字符,但 peek() 只是"看"了下一个字符而没有真正读取它。为了更好地理解这种差异,假设新打开的文件包含字符串 "abc",则以下语句序列将在屏幕上打印两个字符 "ab":
char ch = inFile.get () ; // 读取一个字符
cout << ch; //输出字符
ch = inFile.get () ; // 读取另一个字符
cout << ch; //输出字符
char ch = inFile.peek () ; //返回下一个字符但是不读取它
cout << ch; //输出字符
ch = inFile.get () ; //现在读取下一个字符
cout << ch; //输出字符
>>
读取,但如果数据是非数字字符序列,则应该用 get 或 getline 读取。下面的程序使用 peek 函数通过将文件中出现的每个整数的值递增 1 来修改文件的副本:
// This program demonstrates the peek member function.、 #include <iostream> #include <string> #include <fstream> 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() 来读取字符并将其复制到目标文件中。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算