【STL】iostream 编程:使用提取运算符


本文介绍一下使用提取运算符的规则。


目录

  • [1 概述](#1 概述)
  • [2 说明](#2 说明)

1 概述

提取运算符 >> 已经为所有 C++标准数据类型预先实现,它是从输入流对象读取数据最简单的方式。
格式化文本输入的提取运算符依靠空白字符分割输入的数据 。当一段文本包含多个单词,或是数字以逗号分割时,这种特性会带来不便。

遇到这类场景有两种可行方案

  • 第一种方案 :使用无格式输入成员函数 istream::getline 读取一整块文本(保留内部所有空白字符)之后再借助专用函数解析这段文本。
  • 第二种方案派生一个新的输入流类,增加诸如 GetNextToken 这类成员函数;该函数内部调用 istream 的接口,完成字符数据的提取与格式化处理。

2 说明

  1. >> 核心特性
    >> 默认跳过前置空白(空格、换行、Tab),读到下一个空白字符就停止读取。

    cpp 复制代码
    string s;
    cin >> s;
    // 输入 hello world,只会读到 hello
  2. 适用与不适用场景

    • 适合:数据之间用空格隔开(10 20 30);
    • 不适合:带空格的句子、逗号分隔数据(10,20,30);
  3. 方案一:getline 常规方案
    先读取完整一行,再用 istringstream 或者自定义代码拆分字符串,日常开发最常用。

    cpp 复制代码
    string line;
    getline(cin, line);   // 读取整行,包含空格
    istringstream lineStream(line);
  4. 方案二:继承 istream 扩展(高级方案)
    不推荐新手使用。通过子类封装分词逻辑,实现自定义分隔符读取,属于面向对象扩展流的写法。

  5. 概念区分

    • 格式化输入:>>,自动类型转换、以空白分割;
    • 无格式输入:getline、get()、read(),单纯读取原始字符,不做类型解析;
相关推荐
2402_882893861 小时前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异
c++·哈希·unordered_map·unordered_set
今天要早睡_2 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
汉克老师2 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹2 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码3 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
影视飓风TIM3 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
C++ 老炮儿的技术栈4 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
xxwxx__4 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
wuminyu4 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++