7,使用字符流
  sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,从string读取数据,像string是一个IO流一样。
  7.1 使用istringstream
  很多时候我们需要逐行处理文本,而且需要对行内的单词进行单独分析,这时候使用istringstream是很方便的。
  比如,我们程序需要一次读取一行文本,然后将其中的单词分别取出保存在一个vector中。
  string line,word;
  while (getline(cin, line))
  {
  vector<string> wordList;
  istringstream lineText(line);
  while (lineText >> word)
  {
  wordList.push_back(word);
  }
  }
  7.2 使用ostringstream
  当我们逐步构造输出时,希望后一起打印时,ostringstream是很有用的,它可以帮我们完成类似于itoa,ftoa这种数字转字符串的功能。
  int num1 = 42;
  double pi = 3.1415926;
  string str = "some numbers";
  ostringstream formatted;
  formatted << str << pi << num1;
  cout << formatted.str() << endl;
  其中str成员函数是stringstream有几个特有操作之一。
  string s;
  stringstream strm(s);// 保存s的一个拷贝,此构造函数是explicit的。
  strm.str(); // 返回strm所保存的string对象的拷贝。
  strm.str(s); // 将s拷贝到strm中,返回void。
  8,格式化输入输出 8.1 操纵符
  标准库定义了一组操纵符用来修改流的状态,一个操纵符是一个函数或是一个对象,会影响流的状态,并能用作输入或输出运算符的运算对象,比如我们熟悉的endl,是一个操纵符。
  操纵符用于两大类输出控制:控制数值的输出形式以及控制补白的数量和位置,大多数改变格式状态的操纵符都是设置/复原成对的:一个操纵符用来将格式状态设置为一个新值,而另一个用来将其复原,恢复为正常默认格式。
  8.2 控制布尔值的格式
  通过设置boolalpha可以将bool型变量的true输出为true或将false输出为false。可以设置noboolalpha来将内部状态恢复为默认格式。
  // modify boolalpha flag
  #include <iostream>     // std::cout, std::boolalpha, std::noboolalpha
  int main () {
  bool b = true;
  std::cout << std::boolalpha << b << ' ';
  std::cout << std::noboolalpha << b << ' ';
  return 0;
  }
  8.3 指定整形值的进制
  默认情况是以十进制格式输出,我们可以设置不同的格式操纵符来改变输出整型值的进制。
  oct:以八进制显示
  hex:以十六进制显示
  dec:以十进制显示
  另外可以使用showbase操纵符来显式格式的前缀,8进制前有前导0,十六进制有前导0x。操纵符noshowbase恢复cout的状态,从而不再显示整型值的进制。有时候我们需要将16进制输出为大写如0X FF,可以用操纵符uppercase和nouppercase来控制流输出的大小写状态。
  cout << uppercase << showbase << hex << 20 << 1024
  << nouppercase << noshowbase << dec << endl;
  8.4 控制浮点数格式
  打印精度是通过precision成员或使用setprecision操纵符来改变。其中precision是一个重载函数,一个版本接受int参数,将精度设置为此值,并返回旧精度值。另外一个版本不接受参数,返回当前精度值。setprecision操纵符接受一个参数,用来设置精度。
  用scientific用来指定科学记数法,fixed指定为定点十进制,hexfloat指定为十六进制的浮点数。defaultfloat将流恢复到默认的状态。
  设置showpoint可以用来强制打印小数。
  8.5 输出补白
  setw:指定下一个数字或字符串的小空间
  left:表示左对齐输出。
  right:表示右对齐输出,右对齐是默认格式。
  internal:控制负数的符号的位置,它左对齐符号,右对齐值,用空格填满所有中间空间。
  setfill:允许指定一个字符代替默认的空格来补白输出。
  int i = -16;
  double d = 3.14159;
  cout << "i:" << setw(12) << i << ' '
  << "d:" << setw(12) << d << ' ';
  cout << left
  << "i:" << setw(12) << i << ' '
  << "d:" << setw(12) << d << ' ';
  cout << right
  << "i:" << setw(12) << i << ' '
  << "d:" << setw(12) << d << ' ';
  cout << internal
  << "i:" << setw(12) << i << ' '
  << "d:" << setw(12) << d << ' ';
  cout << setfill('#')
  << "i:" << setw(12) << i << ' '
  << "d:" << setw(12) << d << ' '
  << setfill(' ');