所以我正在编写一个程序,我想要一些用户输入。让我们说我们定义一个int;叫做年龄。如果用户是成年人(让我们说30岁及以上),我希望该计划将所有非正式的"你""正式"你(很多语言,比如法语,有这种区别,想到vous vs tu)在荷兰语中," u"是正式的而不是" je"。
这样做最简洁的方法是什么?我现在有这个(使用今天的日期,2015年9月18日):
string abc;
if (2015 - year of birth > 30) {
abc = "u";
}
else {
abc = "je";
}
if (2015 - year of birth == 30) {
if ( September - month of birth > 0) {
abc = "u";
}
else {
abc = "je";
}
}
if (2015 - year of birth == 30) {
if (September - month of birth == 0) {
if (18 - day of birth >= 0) {
abc = "u";
}
else {
abc = "je";
}
}
}
我很确定它有效,但可能不是最理想的。我怎样才能改善这个?
答案 0 :(得分:5)
我假设您可能真的需要与今天的日期进行比较,所以请使用std::chrono
和localtime
- 后者将日期解压缩为std::tm
:请注意在链接的文档中,年和月分别为1900和0。
std::tie
可以方便地将值分组到tuple
中以便于比较,这样如果最左边的值相等,则会将其视为右边,依此类推。
auto now = std::chrono::system_clock::now();
auto my_time_t = std::chrono::system_clock::to_time_t(now);
std::tm* p = std::localtime(&my_time_t);
string abs = std::tie(p->tm_year + 1900 - 30, p->tm_mon + 1, p->tm_mday) >
std::tie(year_of_birth, month_of_birth, day_of_birth)
? "je" : "u";
如果您实际上并不需要今天的日期,只需抛弃前3行并对p->tm_xxx + ...
值进行硬编码。
答案 1 :(得分:1)
您可以执行类似
的操作location: \(32.0, 22.0) ...
答案 2 :(得分:1)
最简单的方法是实现/使用功能"两个日期之间的天数"。如果你的任务可以接受几天的错误,你可以这样使用它:
int difference = currentDate - birthday; // nb of days between today and birthday of user
abc = (difference >= 30 * 365) ? "u" : "je"; // 365 is approx. number of days in a year
为此,您可以阅读以下问题:
答案 3 :(得分:0)
没有适当的赞誉,很难阅读。在你的代码中,你必须得到很少的赞誉。但为了使它有点短路,让它看起来更好。
string abc = "je";
if (2015 - year of birth > 30) abc = "u";
else if ( 2015 - year of birth == 30){
if ( September - month of birth > 0) abc = "u";
else if (September - month of birth == 0){
if (18 - day of birth >= 0) abc = "u";
}
}
现在您将字符串abc
设为"je"
。这样,你就不需要其他所有了。如果其中一个条件为真,则为"u"
。应该是一样的。
编辑: 实际上,这更像是杰里米的回答。
答案 4 :(得分:0)
你想要达到的目标是,如果某一天是超过30年的一天,那么字符串将是abc = 'u'
,否则它将是abc = "je"
。
现在您使用的方法是静态的,即您在程序中使用特定日期。您可以使用c ++中的ctime
库轻松解决上述问题。
此link包含您要搜索的程序。我希望这会有所帮助:)
答案 5 :(得分:0)
首先,我会将出生日期转换为自纪元以来的毫秒数,并与自纪元以来的当前时间进行比较。这将极大地简化您的代码,因为您将对地址类型进行1次测试。
此主题解释了该过程
Math to convert seconds since 1970 into date and vice versa
然后你可以简单
if(ageInMilliseconds> = formalAgeInMilliseconds)