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
相同的方法
输入类似于: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