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 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable