本文介绍一下使用提取运算符的规则。
目录
- [1 概述](#1 概述)
- [2 说明](#2 说明)
1 概述
提取运算符 >>已经为所有 C++标准数据类型预先实现,它是从输入流对象读取数据最简单的方式。
格式化文本输入的提取运算符依靠空白字符分割输入的数据 。当一段文本包含多个单词,或是数字以逗号分割时,这种特性会带来不便。遇到这类场景有两种可行方案:
- 第一种方案 :使用无格式输入成员函数
istream::getline读取一整块文本(保留内部所有空白字符)之后再借助专用函数解析这段文本。- 第二种方案 :
派生一个新的输入流类,增加诸如 GetNextToken 这类成员函数;该函数内部调用 istream 的接口,完成字符数据的提取与格式化处理。
2 说明
>> 核心特性
>> 默认跳过前置空白(空格、换行、Tab),读到下一个空白字符就停止读取。
cppstring s; cin >> s; // 输入 hello world,只会读到 hello适用与不适用场景
- 适合:数据之间用
空格隔开(10 20 30);- 不适合:带空格的句子、
逗号分隔数据(10,20,30);方案一:getline 常规方案
先读取完整一行,再用 istringstream 或者自定义代码拆分字符串,日常开发最常用。
cppstring line; getline(cin, line); // 读取整行,包含空格 istringstream lineStream(line);方案二:继承 istream 扩展(高级方案)
不推荐新手使用。通过子类封装分词逻辑,实现自定义分隔符读取,属于面向对象扩展流的写法。概念区分
- 格式化输入:>>,自动类型转换、以空白分割;
- 无格式输入:getline、get()、read(),单纯读取原始字符,不做类型解析;