C++ getline():从文件中读取一行字符串
C++ getline():从文件中读取一行字符串
前一节中,详细介绍了如何使用 getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。
我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。
当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件中读取一行字符串。该方法有以下 2 种语法格式:
istream & getline(char* buf, int bufSize);
istream & getline(char* buf, int bufSize, char delim);
其中,第一种语法格式用于从文件输入流缓冲区中读取 bufSize-1 个字符到 buf,或遇到 \n 为止(哪个条件先满足就按哪个执行),该方法会自动在 buf 中读入数据的结尾添加 ‘\0’。
第二种语法格式和第一种的区别在于,第一个版本是读到 \n 为止,第二个版本是读到 delim 字符为止。\n 或 delim 都不会被读入 buf,但会被从文件输入流缓冲区中取走。
以上 2 种格式中,getline() 方法都会返回一个当前所作用对象的引用。比如,obj.getline() 会返回 obj 的引用。
注意,如果文件输入流中 \n 或 delim 之前的字符个数达到或超过 bufSize,就会导致读取失败。
举个例子:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{char c[40];//以二进制模式打开 in.txt 文件ifstream inFile("in.txt", ios::in | ios::binary);//判断文件是否正常打开if (!inFile) {cout << "error" << endl;return 0;}//从 in.txt 文件中读取一行字符串,最多不超过 39 个inFile.getline(c, 40);cout << c ;inFile.close();return 0;
}
假设 in.txt 文件中存有如下字符串:
http://c.ttt.net/cpl/
则程序执行结果为:
http://c.ttt.net/cpl/
当然,我们也可以使用 getline() 方法的第二种语法格式。例如,更改上面程序中第 15 行代码为:
inFile.getline(c,40,'c');
这意味着,一旦遇到字符 ‘c’,getline() 方法就会停止读取。 再次运行程序,其输出结果为:
http://
另外,如果想读取文件中的多行数据,可以这样做:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{char c[40];ifstream inFile("in.txt", ios::in | ios::binary);if (!inFile) {cout << "error" << endl;return 0;}//连续以行为单位,读取 in.txt 文件中的数据while (inFile.getline(c, 40)) {cout << c << endl;}inFile.close();return 0;
}
假设 in.txt 文件中存有如下数据:
http://c.ttt.net/cpl/
http://c.ttt.net/c++/
http://c.tt.net/php/
则程序执行结果为:
http://c.ttt.net/cpl/
http://c.ttt.net/c++/
http://c.tt.net/php/
C++ getline():从文件中读取一行字符串相关推荐
- 字体文件解析 c语言,如何正确地从C语言的文件中读取某些字符串?
您试图从文件中读取的内容并不简单,但可以通过设置一个标志来处理,该标志告诉您是否已经看到 'a' 或 'b' ,跳过所有空白和 ':' 字符,将所有其他字符存储在缓冲区中,根据需要重新分配,然后在第二 ...
- linux posix支持中文,如何在Linux中使用POSIX方法从文件中读取Unicode-16字符串?
我有一个包含UNICODE-16字符串的文件,我想将其读入Linux程序.字符串是从Windows的内部WCHAR格式原始编写的. (Windows是否总是使用UTF-16?例如日文版) 我相信我可以 ...
- python 压缩文件 调用7z_Python:如何从Python压缩的7z文件中读取一行?
(详细介绍收益率部分)注意,我不知道这个库,也不知道你用什么函数来获取未压缩的数据块.但我的意思是:def 7zreadline(filename): with open(filename, 'rb' ...
- java文件替换一行数据_用Golang替换文件中的一行
我是Golang的新手,从一些例子开始 . 目前,我要做的是逐行读取文件,并在满足特定条件时将其替换为另一个字符串 . 该文件用于测试目的包含四行: one two three four 处理该文件的 ...
- Tensorflow 从bin文件中读取数据并
Tensorflow 程序读取数据一共有3种方法: 供给数据(feeding):在程序运行的每一步,让Python代码来供给数据 从文件读取数据: 让一个输入管线从文件中读取数据 预加载数据:在ten ...
- c语言把一个字符从指定文件中读取的函数,C语言中对文件最基本的读取和写入函数...
C语言中对文件最基本的读取和写入函数 C语言read()函数:读文件函数(由已打开的文件读取数据)头文件: #include 定义函数: ssize_t read(int fd, void * buf ...
- python读取日期_从文件中读取日期和数据(Python)
我想从文件中读取时间字符串和数据,但是当我使用loadtxt时,我不能同时读取字符串和数字,因为字符串不是浮点型的.所以我尝试使用genfromtxt并使用delimiter=[]+[]+[]作为我所 ...
- 如何用c语言从txt文件中读取数据
用C语言从txt文件中读取数据,可以使用C标准库文件自带的文件接口函数进行操作. 一.打开文件: FILE *fopen(const char *filename, const char *mode) ...
- python读取一行的函数_Python linecache.getline()读取文件中特定一行的脚本
Python linecache.getline()读取文件中特定一行的脚本 比如: Code highlighting produced by Actipro CodeHighlighter (fr ...
最新文章
- 【数据挖掘】贝叶斯分类 ( 贝叶斯分类器 | 贝叶斯推断 | 逆向概率 | 贝叶斯公式 | 贝叶斯公式推导 | 使用贝叶斯公式求逆向概率 )
- 使用EL表达式接收url的传值
- api可以主动采集用户数据吗_模拟量数字量采集卡之EC-8001篇
- ArrayBlockingQueue中的方法
- 1091 N-自守数
- 32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波
- 【转载】生机勃勃的秋菊freeeim
- 程序员想早点下班被经理拒绝,一气之下要辞职,经理慌了
- c mvc html 选中删除,在 MVC htmlAttribute中,如何设置被禁用_CSharp_开发99编程知识库...
- 新编计算机英语,新编计算机英语教程
- ideal如何快速导入import_Vue性能优化:如何实现延迟加载和代码拆分?
- OAuth1.0a的使用例(RFC5849 1.2节的中文翻译)
- linux下shell程序(一)
- 记录:Ftrace/systrace 功能使用
- [jzoj NOIP2018模拟11.02]
- 快速修改Windows系统字体样式
- Arduino 用Proteus仿真基础知识和实例
- UltraISO(软碟通) v8.2.0.1669 十分不错,感觉比WinISO强大些
- Civil2019程序安装及注意事项
- windows_7_ultimate_with_sp1_x64位旗舰版