根据某个字符串更改程序中的一个单词

时间:2015-09-18 07:15:24

标签: c++ date

所以我正在编写一个程序,我想要一些用户输入。让我们说我们定义一个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";
         }
     } 
 }

我很确定它有效,但可能不是最理想的。我怎样才能改善这个?

6 个答案:

答案 0 :(得分:5)

我假设您可能真的需要与今天的日期进行比较,所以请使用std::chronolocaltime - 后者将日期解压缩为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

为此,您可以阅读以下问题:

  1. Number of days between two dates C++
  2. How to calculate how many days between two dates in c++ visual studio?
  3. How to get the number of days between two dates using boost::date_time
  4. Determining the difference between dates

答案 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)