c++11 标准模板(STL)(std::basic_istream)(七)

news2024/11/27 20:33:04
定义于头文件 <istream>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_istream : virtual public std::basic_ios<CharT, Traits>

类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的输入(例如整数值或空白符分隔的字符与字符串)和无格式输入(例如未处理字符和字符数组)。此功能以通过 basic_ios 基类访问的底层 basic_streambuf 类所提供的接口实现。大多数库实现中, basic_istream 有一个非继承数据成员:用于存储 basic_istream::gcount() 所返回的值。

无格式输入

一直读并取走字符,直至找到给定字符

std::basic_istream<CharT,Traits>::getline

basic_istream& getline( char_type* s, std::streamsize count );

(1)

basic_istream& getline( char_type* s, std::streamsize count, char_type delim );

(2)

从流释出字符,直至行尾或指定的分隔符 delim

第一版本等价于 getline(s, count, widen('\n')) 。

表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,从 *this 释出字符并存储它们于首元素为 s 所指向的数组的相继位置,直至出现任何下列条件(按出示顺序测试):

  • 输入序列中出现文件尾条件(该情况下执行 setstate(eofbit) )
  • 下个可用字符 c 是以 Traits::eq(c, delim) 确定的分隔符。释出该分隔符(不同于 basic_istream::get() )并计入 gcount() ,但不存储它。
  • 已经释出 count-1 个字符(该情况下执行 setstate(failbit) )。

若函数未释出字符(即 count < 1 ),则执行 setstate(failbit) 。

任何情况下,若 count>0 ,则它存储空字符 CharT() 到数组的下个相继位置,并更新 gcount()

注意

因为条件 #2 在条件 #3 前测试,故准确适合缓冲区的输入行不会触发 failbit 。

因为终止字符计为释出的字符,故空输入行不触发 failbit 。

参数

s-指向要存储字符到的字符串的指针
count-s 所指向的字符串的大小
delim-释出所终止于的分隔字符。释出但不存储它。

返回值

*this

异常

若出现错误(错误状态标志不是 goodbit )并且设置了 exceptions() 为对该状态抛出则为 failure 。

若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit 设置了 exceptions() ,则重抛该异常。

 调用示例

#include <iostream>
#include <sstream>
#include <vector>
#include <array>

int main()
{
    std::istringstream input("abc|def|gh");
    std::vector<std::array<char, 4>> v;

    // 注意:下列循环在从  getline() 返回的流上的
    // std::ios_base::operator bool() 返回 false 时终止
    for (std::array<char, 4> a; input.getline(&a[0], 4, '|');)
    {
        v.push_back(a);
    }

    for (auto& a : v)
    {
        std::cout << &a[0] << '\n';
    }
}

输出

读且取走并舍弃字符,直至发现给定字符

std::basic_istream<CharT,Traits>::ignore

basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

从输入流释出并舍弃字符,直至并包含 delim

ignore 表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,它从流释出并舍弃字符,直至出现任一下列条件:

  • 已释出 count 个字符。在 count 等于 std::numeric_limits<std::streamsize>::max() 的特殊情况下禁用此测试。
  • 输入序列中出现文件尾条件,该情况下函数调用 setstate(eofbit) 。
  • 输入序列中下个可用字符 cdelim ,以 Traits::eq_int_type(Traits::to_int_type(c), delim) 确定。释出并舍弃分隔符。若 Traits::eof() 为则禁用此测试。

参数

count-要释出的字符数
delim-释出所止于的分隔字符。亦释出之。

返回值

*this

异常

若出现错误(错误状态标志不是 goodbit )并且设置了 exceptions() 为对该状态抛出则为 failure 。

若内部操作抛出异常,则捕获它并设置 badbit 。若对 badbit 设置了 exceptions() ,则重抛该异常。

 调用示例

#include <iostream>
#include <sstream>
#include <limits>

int main()
{
    std::istringstream input("1\n"
                             "some non-numeric input\n"
                             "2\n");
    for (;;)
    {
        int n;
        input >> n;

        if (input.eof() || input.bad())
        {
            break;
        }
        else if (input.fail())
        {
            input.clear(); // 反设置 failbit
            input.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
            // 跳过坏输入
        }
        else
        {
            std::cout << n << '\n';
        }
    }
    return 0;
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​“你的期望薪资是多少?” Hr现身说法,以退为进多杀2k

面试是初见1小时就要相互了解优缺点的过程&#xff0c;在你问我答的交锋中如何不露声色、不卑不亢的展现自己&#xff0c;通过以下几个常见问题的拆解&#xff0c;你会得到答案的~ 1.你的期望薪资是多少&#xff1f; 菜鸟的回答:假设上家公司是10K&#xff0c;一般人会说我想…

命令行系列:windows cmd官方文档

官方文档 和java开发、Android开发一样。cmd也有官方文档&#xff1a; https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands 如下图&#xff0c;我们可以看到经典的cd,clean命令。 cd命令的全程是什么&#xff1f; cd命令…

基于51单片机的红外测温系统的设计与实现

功能框图 功能描述 本设计以STC89C52单片机为核心控制器&#xff0c;加上其他的模块一起组成非接触人体红外测温的整个系统&#xff0c;其中包含中控部分、输入部分和输出部分。中控部分采用了STC89C52单片机&#xff0c;其主要作用是获取输入部分数据&#xff0c;经过内部处理…

基于SpringBoot+vue的校园闲置物品交易网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

【测试开发】软件测试的常用概念

目录 一. 软件测试的生命周期 1. 需求分析 2. 测试计划 3. 测试设计&#xff0c;测试开发 4. 测试执行 5. 测试评估 ​编辑 二. 软件的生命周期 1. 需求分析 2. 计划阶段 3. 设计阶段 4. 编码阶段 5. 测试阶段 6. 运行维护 三. 如何描述一个BUG 1. 发现问题…

Mac 谷歌浏览器选中查看悬浮出现的元素样式

Mac 谷歌浏览选中查看悬浮出现的元素样式 1. Mac 暂停脚本执行快捷键 command \或F8 2.以斗鱼主站下载悬浮面板为例 3. 操作步骤 &#xff08;1&#xff09;打开控制台&#xff0c;选中源代码 &#xff08;2&#xff09;鼠标选中下载&#xff0c;让面板悬浮出来 &#xf…

网络安全面试题

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

Linux命令----modprobe命令详解

【原文链接】Linux命令----modprobe命令详解 一、modprobe命令的作用 加载内核模块&#xff1a; 使用modprobe命令可以加载指定的内核模块到运行中的内核中。加载内核模块可以在运行时添加新的功能、驱动程序或修改内核行为。 解决模块依赖关系&#xff1a; modprobe命令可以…

机器学习学习笔记——第二章:模型评估与选择

机器学习 机器学习学习笔记——第二章&#xff1a;模型评估与选择 文章目录 机器学习一、经验误差与过拟合1.1、经验误差与泛化误差1.2、过拟合与欠拟合 二、 三个问题三、评估方法3.1、留出法&#xff08;hold-out&#xff09;3.2、k折-交叉验证法&#xff08;k-fold cross v…

银河麒麟系统无法进入桌面拷贝备份文件

最近使用VMWare搭建银河麒麟系统升级后&#xff0c;无法进入桌面&#xff0c;而是进入tty1界面 这个时候如何想导出里面的文件就可以用文件共享的方式右键到虚拟机设置-选项&#xff0c;如图所示 选择一个共享目录 如d盘vm目录 登录tty1账号密码 ls列出文件 如图进行文件拷贝…

.NetCore录屏生成Gif动图程序(Form)的开发过程[代码已上传GitCode]

&#x1f32e;.NetCore录屏生成Gif动图程序(Form)的开发过程 前言: 开发环境&#xff1a;.NetCore3.1 GitCode地址&#xff1a;罗马苏丹默罕默德 / RecordDesktopGif GitCode FrameWork版本地址&#xff1a;尚未同步功能 实现功能 选中屏幕的一块矩形区域按照设置的参数录制…

Qt中QMainWindow的相关介绍

目录 菜单栏 工具栏 状态栏&#xff1a; 停靠窗口&#xff1a; QMainWindow 是标准基础窗口中结构最复杂的窗口&#xff0c;其组成如下: 提供了菜单栏 , 工具栏 , 状态栏 , 停靠窗口 菜单栏&#xff1a;只能有一个&#xff0c;位于窗口的最上方 工具栏&#xff1a;可以有多…

《爱的教育》超全思维导图

思维导图是帮助理解和记忆的高效生产力工具&#xff01; 思维导图以图形的形式表达信息&#xff0c;可视化和关联性&#xff0c;可以更好的激发创作和想象力。 在思维导图中&#xff0c;我们使用简洁的关键词或短语来表达思想&#xff0c;而不是完整的句子或段落。可以帮助我们…

MAYA鲨鱼的绑定

最后一个柚有问题 轴向正确的旋转&#xff0c;成C型 弄乱了 W整体移动 D单个移动 X轴没指向下一个关节 控制器创建 根控制器 控制器很好匹配关节 建组 出来了&#xff0c;控制器位置还在 确保旋转关节是0 处理层级 控制器不跟着 没办法刷蒙皮 # 错误: file: H:/Autodesk/May…

安达发|如何选择适合企业的APS排程系统?

APS是一个优化的排程调度工具&#xff0c;归根结底&#xff0c;APS追求的是企业生产效率的提升&#xff0c;而不是替代人工排程。如何验证呢&#xff1f;对于APS用户来说&#xff0c;检验衡量的最简单的方法就是&#xff0c;拿出过去某一个月实际生产计划的历史数据&#xff0c…

微信小程序创建步骤图文

1.登录微信公众平台 首先&#xff0c;通过网址登录https://mp.weixin.qq.com/&#xff0c;找到立即注册 进行点击。 2.进入该页面时&#xff0c;选择点击小程序 3.注册开发者账号点击立即注册 4.进入该页面 账号信息注册 5.下一步 邮箱激活 注意 &#xff1a;登录邮箱&…

【AntD】Antd Table组件的头部单元格水平居中,单元格居左:

文章目录 一、效果图:二、实现代码: 一、效果图: 二、实现代码: customHeaderCell: () > ({ style: { textAlign: center } }),//头部单元格水平居中

Vue3间距(Space)

可自定义设置以下属性&#xff1a; 对齐方式&#xff08;align&#xff09;&#xff0c;类型&#xff1a;‘start’|‘end’|‘center’|‘baseline’&#xff0c;默认 undefined间距方向&#xff08;direction&#xff09;&#xff0c;类型&#xff1a;‘horizontal’|‘vert…

小程序Url Link跳转怎么获取query参数?

onLoad(options){if (options) {let value1 decodeURIComponent(options.value1)let value2 decodeURIComponent(options.value2)...调用后台接口查询数据} } 我是通过这种方式接收参数的&#xff0c;如果想验证可以通过编译器模拟&#xff1a;

阿里云使用SMC进行服务器迁移

操作文档 阿里云SMC适用于所有的可以公网访问的主机 1、资源准备 1、我们必须要要有相关AliyunSMCFullAccess的权限&#xff0c;如果操作RAM账号具有足够的权限可以自动授权 2、我们的源主机要可以公网访问&#xff0c;并且可以ssh且密码登录 2、在控制台点击迁移源 配置我们源…