stringstream 如何与运算符 << 和 >> 一起工作?

How does stringstream works with operators << and >>?

输入类似于:07:10 我得到的小时值是正确的,但我得到的值却很奇怪。

void timeConversion(string s) 
{
    int hour,min;
    
    stringstream ss;
    ss << s.substr(0,2);
    ss >> hour;
    cout << hour <<endl;
    
    ss << s.substr(3,2);
    ss >> min;
    cout << min<<endl;    
}

像这样混合输入和输出是有问题的。 hour 的初始提取设置 eofbit,这意味着当您尝试提取 min 时它立即失败。

您可以添加 ss.clear() 来重置标志。

void timeConversion(std::string s) 
{
    int hour,min;
    
    std::stringstream ss;
    ss << s.substr(0,2);
    ss >> hour;
    std::cout << hour << std::endl;
    ss.clear();

    ss << s.substr(3,2);
    ss >> min;
    std::cout << min << std::endl;    
}

或者您使用单独的流

void timeConversion(std::string s) 
{
    int hour,min;
    
    std::stringstream { s.substr(0,2) } >> hour;
    std::stringstream { s.substr(3,2) } >> min;

    std::cout << hour << std::endl << min << std::endl;    
}

或者您可以使用不同的转换函数

void timeConversion(std::string s) 
{
    int hour = std::stoi(s.substr(0,2));
    int min = std::stoi(s.substr(3,2));

    std::cout << hour << std::endl << min << std::endl;    
}

旁白:我建议使用 std::string_view 来避免复制字符串段,它具有与 const std::string

相同的方法