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)执行时间上区别 < ...
随机推荐
- LeetCode Target Sum
原题链接在这里:https://leetcode.com/problems/target-sum/description/ 题目: You are given a list of non-negati ...
- php中empty(), is_null(), isset()函数区别(转)
empty(), is_null(), isset()真值表(区别) 我们先来看看这3个函数的功能描述 www.111cn.net isset 判断变量是否已存在,如果变量存在则返回 TRUE,否 ...
- 修改windows文件的换行符
应用场景: 在办公中,有可能存在,某些命令脚本使用windows下的文本编辑器进行编写 当放到测试环境的Linux中时,运行报错 需要使用的软件:xxd hexdump dos2unix 1.运行w ...
- MongoDb学习网站
http://www.runoob.com/mongodb/mongodb-window-install.html
- hihoCoder#1062(最近公共祖先一)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢? “为什么呢 ...
- 查看,创建,删除,映射rbd镜像
标签(空格分隔): ceph,ceph实验,pg 1. 创建镜像: [root@node3 ~]# rbd create testpool/foo --size 1024 2. 查看镜像信息: [ro ...
- 在IIS下配置自定义的报错页面
这里介绍在IIS中配置自定义出错页面的方法,主要以404为例,其他状态可类推 1.远程桌面连接IIS所在的服务器,进入控制面板>系统和安全>管理工具,双击打开IIS管理器,选择需要配置的网 ...
- vuex的实用知识点
本文系统介绍vuex的全部内容 为什么用vuex 组件通信知道吧,相信很多同学,刚学的时候很难懂,实时上在实际应用中,大型项目如果使用最原始的组件通信会非常的麻烦,主要体现在多层嵌套的组件之间的通信, ...
- python连接sql server数据库
记录一下pyodbc连接数据库的使用方法和注意事项,基于python2.7: 前提: pip install pyodbc .下载pyodbc包. pyodbc.connect('DRIVER ...
- ie6 ie7下报脚本错误"Expected identifier, string or number" 的原因和解决方法
在IE6和ie7里面,脚本报错"Expected identifier, string or number" 写下这个是个之前我已经很头疼了,因为我的代码在其他浏览器里都是正常的, ...