Penelope Cheng 2019-07-17 16:37 采纳率: 0%
浏览 1397

输入输出流中的空格问题

我理解的输入输出流:
输入过程:
A.键盘->输入缓冲区
B.输入缓冲区->cin时赋值给变量
输出过程:
C.变量->cout时存入输出缓冲区
D.输出缓冲区->显示器

为什么下面代码中前4段的输出一样呢?我感觉涉及到以下问题点,求大神解惑,感谢!
1.用cin赋值给字符串,与用istringstream赋值给字符串,有什么区别?
2.跳过空格,指的是键入的空格不存储到输入缓冲区里;还是,先存入到输入缓冲区里,但给字符串赋值的时候跳过?即在A阶段还是B阶段跳过空格?
3.遇到空格,输入停止:指的是,往输入缓冲区里存的时候,遇到空格停止;还是,从输入缓冲区赋值给字符串的时候,遇到空格停止?即A阶段遇到空格停止,还是B阶段遇到空格停止?

#include <iostream>
#include <sstream>

using namespace std;

int main(int argc, char const* argv[])
{
    istringstream istr("  78456  9  123"); // 数字前面都是两个空格
    string a,b,c;
    /*-----------------------------------------------*/
    cout << "第1段:" << endl;
    cin >> a >> b >> c; //键盘输入与istr相同的字符串
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    /*-----------------------------------------------*/
    cout << "第2段:" << endl;
    cin >> skipws >> a >> skipws >> b >> skipws >> c; //键盘输入与istr相同的字符串
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    /*-----------------------------------------------*/
    cout << "第3段:" << endl;
    istr >> skipws >> a;
    istr >> skipws >> b;
    istr >> skipws >> c;
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    /*-----------------------------------------------*/
    cout << "第4段:" << endl;
    istr >> noskipws >> a;
    istr >> noskipws >> b;
    istr >> noskipws >> c;
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    /*-----------------------------------------------*/
    cout << "第5段:" << endl;
    a = "  78456";
    b = "  9";
    c = "  123";
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;

    return 0;
}

输出结果:
第1~4段相同,无空格
第1~4段相同,无空格

  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2019-07-17 18:16
    关注

    istringstream这是C++的输入流操作,会根据空格来截断单词,不管有多少空格
    而你第五段a,b,c单独设置成了字符串常量,在打印的时候肯定是把空格当作字符串成员来处理

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作