//下面这段代码,我的运行结果在注释中已经给出了。
//对于istr第二次>>line,
//为什么不是将abcde传给了line,而是未成功改变 line的值呢
//求求大佬解答,谢谢啦!
int main()
{
string line;
string a = "12345";
string b = "abcde";
istringstream istr;
istr.str(a);
//12345
cout << "将a拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
istr >> line;
cout << line << endl;//12345没问题
istr.str(b);
//abcde
cout << "将b拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
istr >> line; //没起作用啊?????????????????????????
cout << line << endl;//还是12345
}
参考GPT和自己的思路:使用stringstream类的str()函数将不同的字符串赋给字符串流istr.str()时,必须先使用clear()函数将“流错误状态”的标志位重置,这很重要,因为如果标志位未被重置,那么后面的输入或输出操作都将失效。对于这个问题的解决方法就是在每次使用istr.str()之前使用istr.clear()来重置输入流的状态。下面是修改后的代码:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
string line;
string a = "12345";
string b = "abcde";
istringstream istr;
istr.str(a);
//12345
cout << "将a拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
istr >> line;
cout << line << endl;//12345没问题
istr.clear();//重置状态
istr.str(b);
//abcde
cout << "将b拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
istr >> line;
cout << line << endl;//abcde成功修改line的值
return 0;
}