> std::get_tim-6ren">
gpt4 book ai didi

c++ - std::get_time - 如何检查解析错误

转载 作者:可可西里 更新时间:2023-11-01 12:43:00 24 4
gpt4 key购买 nike

我正在使用以下代码将字符串流解析为 tm 结构:

std::tm tm;
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");

我有兴趣检查是否发生解析错误(无效输入)。看起来这个函数并没有抛出异常。在文档中没有找到有用的信息: http://en.cppreference.com/w/cpp/io/manip/get_time

听起来像是检查“goodbit”可能是方向,但我不确定该怎么做。

(我使用的是VS2013编译器)

最佳答案

一如既往,std::istream 通过设置其 iostate 之一来报告错误, 可以使用成员函数 fail() 进行测试, operator! ,或通过 converting the stream object to bool .如果要配置流对象使其在发生错误时抛出异常,可以调用exceptions()。 .

这是一个使用成员函数 fail() 来检查是否发生错误的小示例。

#include <iostream>
#include <sstream>
#include <iomanip>

int main()
{
std::tm t;
std::istringstream ss("2011-Februar-18 23:12:34");
ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
if (ss.fail()) {
std::cout << "Parse failed\n";
} else {
std::cout << std::put_time(&t, "%c") << '\n';
}
}

关于c++ - std::get_time - 如何检查解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com