字符串流 istringstream 和 ostringstream 的用法

2016-01-22 23:34:08|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++|来源:唯设编程网

流(stream)为C++的输入、输出操作提供了诸多便利,通常我们使用的流是std::cout用于输出,使用std::cin用于接收用户输入,除此之外,C++还提供了文件流用于实现文件的读、写操作,字符串流用于进行字符串的操作。

C++提供的流(stream)包括三种类型:用于控制台输入/输出的流、用于文件操作的文件流和用于字符串处理的字符串流。

(1) 基于控制台的流

istream:用于从流中读取内容;

ostream:用于将内容写到数据流中;

iostream:用于对流进行读写,从istream和ostream派生;

它们包含在iostream头文件中。

(2) 用于文件读取/写入的文件流

ifstream:用于从文件中读取,由istream派生而来;

ofstream:用于将内容写到文件中去,由ostream派生而来;

fstream:实现文件的读写操作,有iostream派生而来;

它们包含在头文件fstream中。

(3) 基于字符串I/O操作的字符串流

istringstream:实现从字符串(string)对象中读取内容,由istream派生而来;

ostringstream:实现将内容写到字符串(string)对象中,由ostream派生而来;

stringstream:实现string对象的读写操作,由iostream派生而来;

它们包含在头文件sstream中。

前两种流(stream)相信大家并不陌生,下面主要介绍用于字符串操作的字符串流。

istringstream类

描述:用于从流中提取数据,支持 >> 操作

这里字符串可以包括多个单词,单词之间使用空格分开,可以使用字符串对istringstream进行初始化,对应的构造函数如下:

istringstream::istringstream(string str); 

也可以在构造完成后对istringstream进行赋值,如下:

istringstream istr("1 56.7");  
istr.str("1 56.7");//把字符串"1 56.7"存入字符串流中 

istringstream的str()函数返回内部对应的字符串表示。

通常,我们可以使用istringstream实现字符串到其它类型数据的转换,下面的例子实现从空格分隔的字符串中读取整型和浮点型数据:

#include <iostream>   
#include <sstream>   
using namespace std;  
int main()  
{  
    istringstream istr("1 56.7");  
  
    cout<<istr.str()<<endl;//直接输出字符串的数据 "1 56.7"   
      
    string str = istr.str();//函数str()返回一个字符串   
    cout<<str<<endl;  
      
    int n;  
    double d;  
  
    //以空格为界,把istringstream中数据取出,应进行类型转换   
    istr>>n;//第一个数为整型数据,输出1   
    istr>>d;//第二个数位浮点数,输出56.7   
  
    //假设换下存储类型   
    istr>>d;//istringstream第一个数要自动变成浮点型,输出仍为1   
    istr>>n;//istringstream第二个数要自动变成整型,有数字的阶段,输出为56   
  
    //测试输出   
    cout<<d<<endl;  
    cout<<n<<endl;  
    system("pause");  
    return 1;  
} 

下面的例子从一行字符串中逐个将空格隔开的单词进行提取并输出到控制台:

#include <iostream>   
#include <sstream>   
using namespace std;  
int main()  
{  
    istringstream istr;  
    string line,str;  
    while (getline(cin,line))//从终端接收一行字符串,并放入字符串line中   
    {  
        istr.str(line);//把line中的字符串存入字符串流中   
        while(istr >> str)//每次读取一个单词(以空格为界),存入str中   
        {  
            cout<<str<<endl;  
        }  
    }  
    system("pause");  
    return 1;  
}  

输入:123 34 45

输出:

123

34

45

ostringstream类

描述:该类用来将数据写入字符串流(往流中写入数据),支持<<操作符:

同样,ostringstream也可以使用字符串进行初始化,对应的构造函数:

ostringstream::ostringstream(string str); 

在初始化完成后,同样也可以使用字符串对其进行重新赋值:

ostringstream ostr("1234");  
ostr.str("1234");//把字符串"1234"存入字符串流中

下面的例子演示了ostringstream的基本用法:

#include <iostream>   
#include <sstream>   
using namespace std;  
int main()  
{  
    //初始化输出字符串流ostr   
    ostringstream ostr("1234");  
    cout<<ostr.str()<<endl;//输出1234   
      
    ostr.put('5');//字符4顶替了1的位置   
    cout<<ostr.str()<<endl;//输出5234   
  
    ostr<<"67";//字符串67替代了23的位置,输出5674   
    string str = ostr.str();  
    cout<<str<<endl;  
    system("pause");  
    return 1;  
}
<12>
发表评论0条 】
网友评论(共?条评论)..
字符串流 istringstream 和 ostringstream 的用法