getline()函数的两种用法
getline()函数的输入流对象可以是标准输入流对象cin,也可以是一个文件输入流对象fin;
(1)输入流对象的成员函数(有三个参数,一般除非需要自己选定停止符,并不推荐使用):
basic_istream<char>& istream::getline(char *str, streamsize num, char delim = '\n');
这个函数是成员函数,所以必须通过对象调用.streamsize为signed integer type,其中:
str为C 字符数组的首地址,保存最终读取的结果.注意是字符数组
num为最多读取的字符个数
delim可选,表示读取到该字符时自动停止读取,默认为换行符
用getline()读取字符到str中,str在代码中通常体现为一个字符数组,streamsize num是一次读入多少个字符, num - 1个字符已经读入,当碰到一个换行标志(或自定义的字符delim)或一个EOF或任意的读入,delim字符不会被放入buffer中。delim字符可以自已设定,默认为回车符'/n'
(2)全局函数(有两个参数,一般推荐使用)
basic_istream<char>& getline(basic_istream<char>& in, string& str);
in为输入流对象的引用;
str为需要保存读取的数据的目的字符串,注意是string对象的引用
以下示例代码中将分别对上述两种getline()用法作说明
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const char sep[] = { 0x1F, 0x7C }; //分隔符
int main()
{
//下面语句输出一条离线消息到文件
ofstream fout("ol_msg.msg", ios::app);
string fromUser = "userA";
if (fout.is_open()) {
fout << fromUser << sep << __TIME__ << sep << "hello!" << endl;
fout.close();
}
///第一种方式,每次读取一个字段,通过传递读取结束标志来自动找到字段的结束
ifstream fin("ol_msg.msg");
if (fin.is_open()) {
cout << "From:\tOn:\t\tContent: " << endl;
while (!fin.eof()) { //未到文件尾
char _from[];
if (!fin.getline(_from, , sep[]))
break;
fin.ignore(); //忽略一个字符 char _time[];
fin.getline(_time, , sep[]);
fin.ignore(); //忽略一个字符 string content;
getline(fin, content); //读取该行剩余的内容即为消息内容
cout << _from << "\t" << _time << "\t" << content << endl;
}
fin.close();
}
cout << endl;
///第二种方式,每次读取一行,然后再通过查找分隔符来分开各个字段
ifstream fin2("ol_msg.msg");
if (fin2.is_open()) {
string line;
while (getline(fin2, line)) { //成功读取到一行
string _time, content;
string::size_type pos = line.find(sep); //查找分隔符的位置
fromUser = line.substr(, pos); //提取左边的部分为第一字段
line = line.substr(pos + ); //将第一字段内容去掉 pos = line.find(sep); //查找第二个分隔符
_time = line.substr(, pos); //提取第二字段 content = line.substr(pos + ); //剩余的为第三字段
cout << fromUser << "\t" << _time << "\t" << content << endl;
}
fin2.close();
}
//ofstream f_del("ol_msg.msg"); //清空文件内容
//f_del.close();
return ;
}
getline()函数的两种用法的更多相关文章
- underscore函数存在两种用法
var _ = require('underscore'); var a = {"a": 1, "b": 2}; console.log(_(a).size() ...
- C++ getline()的两种用法
getline():用于读入一整行的数据.在C++中,有两种getline函数.第一种定义在头文件<istream>中,是istream类的成员函数:第二种定义在头文件<string ...
- c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast
C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...
- operator 的两种用法
C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).1.操作符 ...
- in有两种用法:
# in有两种用法: 1. 在for中. 是把每一个元素获取到赋值给前⾯的变量. 2. 不在for中. 判断xxx是否出现在str中. #len() 为内置函数,输出为1,2,3,4....., 长度 ...
- [VC]C++ operator 两种用法
C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).下面分别进行介绍: 1.operato ...
- JavaScript 函数的两种声明方式
1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...
- Service的两种用法及其生命周期
先来一点基础知识: Service 是android的四大组件之一,与Activity同属于一个级别,它是运行在后台进行服务的组件(例如在后台播放的音乐,播放音乐的同时并不影响其他操作).Servic ...
- JSP中的include的两种用法
1.两种用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用法区别 (1)执行时间上区别 < ...
随机推荐
- Linux中几个实用快捷键
返回上层目录: cd .. 命令提示符: user@ubuntu: @之前的部分为当前用户ID名称: @之后冒号之前是主机名称 sudo :(Superusers Do) 以超级用户执行 在相对路径 ...
- 《Javascript高级程序设计》阅读记录(二):第四章
这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...
- 10.Selenium+Python+任务计划程序实现定时发送邮件
一.python具体代码实现 # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.header ...
- ECMAScript6入门-序言
本系列笔记基于阮一峰大佬的开源书籍.如果大家想看可以去该地址 本系列笔记只记录本人自己学习的过程,如果有侵权收到通知会自行下架. 如果大家看到可以直接去地址处学习,如果觉得好还望支持正版. 在此感谢阮 ...
- Process使用
最近在一个项目中,需要在C#中调用cmd窗口来执行一个命令,使用到了Process这个类,使用过程中遇到不少问题,好在终于解决了.赶紧记录下来. Process process = new Proce ...
- unix下网络编程之I/O复用(二)
select函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或是多个事件发生或经历一段指定的时间后才唤醒它.我们调用select告知内核对哪些描述字(就读.写或异常条件)感兴趣以 ...
- 自定义mysql函数时报错,[Err] 1418 - This function has none of DETERMINISTIC......
今天在我执行自定义mysql函数的SQL时发生了错误,SQL如下: /** 自定义mysql函数 getChildList */delimiter //CREATE FUNCTION `pengwif ...
- 通过maven的jar包库找到对应的jar包。
查找连接: http://search.maven.org/ 查找实例 http://search.maven.org/#search|ga|1|a%3A%22log4j%22
- 分析诊断工具之一:MYSQL性能查看(多指标)
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...
- kubernetes 学习 创建cronjob
POM.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...