挑战30天C 入门极限:C 的iostream标准库介绍以及对左移与右移运算符的重载2

文章作者 100test 发表时间 2007:03:10 17:12:42
来源 100Test.Com百考试题网


接下来我们继续看一下C 风格的串流控制,C 引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。
  istringstream类用于执行C 风格的串流的输入操作。
  ostringstream类用于执行C 风格的串流的输出操作。
  stringstream类同时可以支持C 风格的串流的输入输出操作。

  istringstream类是从istream(输入流类)和stringstreambase(c 字符串流基类)派生而来,ostringstream是从ostream(输出流类)和stringstreambase(c 字符串流基类)派生而来,stringstream则是从iostream(输入输出流类)和和stringstreambase(c 字符串流基类)派生而来。

他们的继承关系如下图所示:



  istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。
  istringstream的构造函数原形如下:
  istringstream::istringstream(string str).

示例代码如下:

 C 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
#include <sstream>
using namespace std.
int main()
{
istringstream istr.
istr.str("1 56.7",).
//上述两个过程可以简单写成 istringstream istr("1 56.7").
cout << istr.str()<int a.
float b.
istr>>a.
cout<istr>>b.
cout<system("pause").
}


  上例中,构造字符串流的时候,空格会成为字符串参数的内部分界,例子中对a,b对象的输入"赋值"操作证明了这一点,字符串的空格成为了整型数据与浮点型数据的分解点,利用分界获取的方法我们事实上完成了字符串到整型对象与浮点型对象的拆分转换过程。
  str()成员函数的使用可以让istringstream对象返回一个string字符串(例如本例中的输出操作(cout<  ostringstream同样是由一个string对象构造而来,ostringstream类向一个string插入字符。
  ostringstream的构造函数原形如下:
  ostringstream::ostringstream(string str).

示例代码如下:

 C 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
#include <sstream>
#include <string>
using namespace std.
int main()
{
ostringstream ostr.
//ostr.str("abc").//如果构造的时候设置了字符串参数,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长
ostr.put(d).
ostr.put(e).
ostr<<"fg".

string gstr = ostr.str().
cout<system("pause").
}



  在上例代码中,我们通过put()或者左移操作符可以不断向ostr插入单个字符或者是字符串,通过str()函数返回增长过后的完整字符串数据,但值得注意的一点是,当构造的时候对象内已经存在字符串数据的时候,那么增长操作的时候不会从结尾开始增加,而是修改原有数据,超出的部分增长。

  对于stringstream了来说,不用我多说,大家也已经知道它是用于C 风格的字符串的输入输出的。
  stringstream的构造函数原形如下:

  stringstream::stringstream(string str).

 C 代码
示例代码如下:

//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
#include <sstream>
#include <string>
using namespace std.

int main()
{
stringstream ostr("ccc").
ostr.put(d).
ostr.put(e).
ostr<<"fg".
string gstr = ostr.str().
cout<
char a.
ostr>>a.
cout<
system("pause").
}


  除此而外,stringstream类的对象我们还常用它进行string与各种内置类型数据之间的转换。

示例代码如下:

 C 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include <iostream>
#include <sstream>
#include <string>
using namespace std.

int main()
{
stringstream sstr.
//--------int转string-----------
int a=100.
string str.
sstr< sstr>>str.
cout<//--------string转char[]--------
sstr.clear().//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。
string name = "colinguan".
char cname[200].
sstr< sstr>>cname.
cout< system("pause").
}



相关文章


挑战30天C 入门极限:C 的iostream标准库介绍以及对左移与右移运算符的重载3
1998年4月全国计算机等级考试二级C语言试卷(含答案)
挑战30天C 入门极限:C 的iostream标准库介绍以及对左移与右移运算符的重载2
1998年9月全国计算机等级考试二级C语言试卷(含答案)
1999年4月全国计算机等级考试二级C语言试卷(含答案)
挑战30天C 入门极限:C 的iostream标准库介绍以及对左移与右移运算符的重载1
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛