如何初始化stringstream对象

时间:2013-07-19 10:28:49

标签: c++ stringstream

我有一个stringstream对象,我想知道如何初始化它。

stringstream os;
for(int i = 0; i < 10; ++i){
        value = rand() % 100;
        os<<value;
        cout<<os.str()<<" "<<os<<endl;
        ntree->insert(os.str());
        //I want my os object to be initialized here
    }

3 个答案:

答案 0 :(得分:11)

如果每次循环都需要一个新的ostringstream对象,显而易见的解决方案是在循环顶部声明一个新对象。所有ostream类型都包含很多状态,并且根据上下文,重置所有状态可能或多或少都很困难。

答案 1 :(得分:8)

如果您想用其他内容替换stringstream的内容,可以使用str()方法执行此操作。如果你在没有任何参数的情况下调用它,它只会获取内容(正如你已经在做的那样)。但是,如果你传入一个字符串,那么它将设置内容,丢弃之前包含的内容。

E.g:

std::stringstream os;
os.str("some text for the stream");

有关详细信息,请查看方法的文档:http://www.cplusplus.com/reference/sstream/stringstream/str

答案 2 :(得分:0)

您的问题有点模糊,但代码示例更清晰。

您有两种选择:

首先,通过构造初始化ostringstream(在循环的每个步骤中构造另一个实例):

for(int i = 0; i < 10; ++i) {
    value = rand() % 100 ;
    ostringstream os;
    os << value;
    cout << os.str() << " " << os << endl;
    ntree->insert(os.str());
    //i want my os object to initializ it here
}

其次,重置内部缓冲区并清除流状态(错误状态,eof标志等):

for(int i = 0; i < 10; ++i) {
    value = rand() % 100 ;
    os << value;
    cout << os.str() << " " << os << endl;
    ntree->insert(os.str());
    //i want my os object to initializ it here
    os.str("");
    os.clear();
}