8

我有一个 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 reset here
    }
4

3 回答 3

12

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

于 2013-07-19T10:32:30.157 回答
8

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

例如:

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

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

于 2013-07-19T11:07:49.397 回答
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();
}
于 2013-07-19T10:43:56.590 回答