【发布时间】:2018-11-09 09:10:14
【问题描述】:
我有一个程序需要读取输入的日期。如果输入日期 D/MM/YYYY,我可以正确读取日期。当日期输入为 DD/MM/YYYY 时,它会错误地读取,因为 substr 没有考虑其中有 2 位数字的天数。
所以有 4 种不同的正确方式可以输入日期:
日/月/YYYY
DD/MM/YYYY
D/MM/YYYY
DD/M/YYYY
此外,如果输入了错误的日期/月份,例如 2018 年 4 月 100 日,则会妨碍正确读取字符串的其余部分。年份和月份。
通过我自己的测试,我有一个 for 循环来寻找第一个“/”,然后读取它之前的内容,但这没有用。
我该如何解释这些不同的日期输入方式?
MYDate::MYDate(std::string date) {
//int size = date.length();
SetYear(year_ = std::atoi(date.substr(5, 4).c_str()));
SetMonth(month_ = std::atoi(date.substr(3, 2).c_str()));
SetDay(day_ = std::atoi(date.substr(0, 2).c_str()));
/*
9/9/2001
09/09/2001
9/09/2001
09/9/2001
*/
}
【问题讨论】:
-
你考虑过使用正则表达式吗?
-
只要你尝试使用硬编码的字符串位置,这个问题就会一直存在。想象一下,您刚刚遇到一个从未见过约会对象的人,并试图向他们描述如何阅读约会对象;你当然不会告诉他们“位置 3 和 4 的字符代表月份”。
-
看看std::string and it's find method。寻找 / 是正确的想法。它怎么不适合你?
-
@rafaelgonalez 我做了,但不知道从哪里开始。
-
@super 我实际上确实在 for 循环之前使用了 find 。我认为他们没有通过研究工作,因为 / 是一个转义字符。所以我尝试了 // & \/ 但没有任何乐趣。