区别:
clear():清除流的状态标志,但不会改变流中的内容。
str(”“):清空流中的数据,相当于无论之前流中的数据是什么,使用str(”“)之后,流数据为空,并且将状态符固定。
例1:两者均无的实例
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;//插入int数据,插入后,流的eofbit位固定,所以流将不再接受数据
aa>>m;//装换为字符串
m=”123“
aa<<b;//eofbit位固定,不会接收b
aa>>n;//n=”“
cout<<m<<endl<<n<<endl<<aa.str()<<endl;//流的内容仍然为”123“
}
运行结果:
123
123
例2:仅使用clear()
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.clear();//清除了流的eofbit位(failbit,badbit),使流能继续接受数据,但是流之前的内容并未清除
aa<<b;//b的数据传入流
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;
}
运行结果
123
456
123456
例3:仅使用str(”“)
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.str("");//清空了流的内容,同时再次固定了eofbit位,流将不再接收数据
aa<<b;
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;//运行结果将有两个空白行
}
运行结果:
123
例4:同时使用
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
void main(void)
{
stringstream aa;
int a=123,b=456;
string m,n;
aa<<a;
aa>>m;
aa.clear();
aa.str("");
aa<<b;
aa>>n;
cout<<m<<endl<<n<<endl<<aa.str()<<endl;
}
运行结果:
123
456
456
从四个例可以看出
1.如果要多次利用stringstream进行类型转换,必须使用str(”“),否则占用内存将不断扩大;
2.使用str(”“)后,流的eofbit位固定了,再次进行类型转换时,需要清除状态位,所以要使用clear();
本文详细介绍了C++中stringstream的clear()和str("")方法的区别。clear()用于清除流的状态标志,而str("")会清空流中的数据并固定状态。通过四个示例,阐述了在不同类型转换和数据处理中如何正确使用这两个方法。
和str(”“)的区别&spm=1001.2101.3001.5002&articleId=46456475&d=1&t=3&u=556ccf896fda459f89fa26aff1526e31)
2370

被折叠的 条评论
为什么被折叠?



