wandererhh 2023-03-25 20:25 采纳率: 0%
浏览 22

关于使用stringstream >> 给string 赋值的问题

//下面这段代码,我的运行结果在注释中已经给出了。
//对于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
}

  • 写回答

2条回答 默认 最新

  • IT_service_mesh 2023-03-25 20:28
    关注

    参考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;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月25日