我对C++中stringstream的一些理解


很多介绍是这么写的

在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++ 语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。

我觉得,如果经常写涉及输入输出,比如文件操作,字符串和数据读取,那么理解“流”的概念是自然而然的。C语言中对流的操作似乎并不方便。
C++中分为4种,输入 输出 文件 (字符)串流
我感觉最有利于工程处理的,就是提供了一个好用的临时处理区。比如从键盘输入后,能够保存到一个字符串流中,进行某些操作后再从字符串流中将数据导入到该去的地方。这样的设计能够避免需要用户刻意按照某些特定的输入顺序输入。

举个栗子:

#include<sstream>
#include<string>
using namespace std;
int main()
{
    int a = 42;
    double b = 234562879527;
    string integer;

    ostringstream JKL;
    JKL << a << " : " << b;

    integer = JKL.str();
    cout << integer << endl;
    return 0;
}

是不是很方便!调用ostringstream::str()函数,把保存在串流中的数字转成字符串输出了。流在这里就起到了一个类似案板的作用。

值得一提的是,想要清空流中的数据,stringstream::clear()的作用是把案板空着的地方挪到跟前,实际上没有释放占用的内存(它并不清空任何内容,它只是重置了流的状态标志而已);而在stringstream::str()函数里写上引号: str(“”) 的形式,能强制将流赋值为空。

但能说stringstream::clear()没用吗?其实它的作用是重置了状态标志,让这个流表示自己是新的,可以往里塞其他类型的数据。这时候,用str(“”)都不能起作用。

#include<sstream>
#include<string>
using namespace std;
int main()
{
    stringstream sstream;
    int first, second;
    //把string转成int
    sstream << "456";
    sstream >> first;
    cout << first << endl;
    //您可以把下一行注释掉后再试一次
    sstream.clear();
    sstream << true;
    sstream >> second;
    cout << second << endl;
    return 0;
}

更多的用法还等待着人民去发现和创造。

发表评论

电子邮件地址不会被公开。