Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 根据特定字符串更改程序中的一个单词_C++_Date - Fatal编程技术网

C++ 根据特定字符串更改程序中的一个单词

C++ 根据特定字符串更改程序中的一个单词,c++,date,C++,Date,所以我正在写一个程序,我想要一些用户输入。假设我们定义了一个int;叫做年龄。如果用户是成年人(比如说30岁以上),我希望程序将所有非正式的“you”替换为荷兰语中的“formal”you(许多语言,比如法语,都有这种区别,比如vous vs tu),“u”是正式的,而不是“je” 最简洁的方法是什么?我现在有这个(使用今天的日期,2015年9月18日): 我很确定它是有效的,但可能是次优的。我该如何改进这一点?如果没有适当的表扬,阅读起来相当困难。在你的代码中,你必须获得一些荣誉。但要让它短一

所以我正在写一个程序,我想要一些用户输入。假设我们定义了一个int;叫做年龄。如果用户是成年人(比如说30岁以上),我希望程序将所有非正式的“you”替换为荷兰语中的“formal”you(许多语言,比如法语,都有这种区别,比如vous vs tu),“u”是正式的,而不是“je”

最简洁的方法是什么?我现在有这个(使用今天的日期,2015年9月18日):


我很确定它是有效的,但可能是次优的。我该如何改进这一点?

如果没有适当的表扬,阅读起来相当困难。在你的代码中,你必须获得一些荣誉。但要让它短一点,也会让它看起来更好

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”。应该是一样的

编辑:
实际上,像杰里米的回答那样做更好。

你可以像这样做

string abc="u";

if ((2015 - year of birth < 30) ||
    (2015 - year of birth ==30 && September- month of birth < 0) ||
    (2015 - year of birth ==30 && September- month of birth ==0 && 18 - day of birth < 0)) 

abc ="je";
字符串abc=“u”;
如果((2015年-出生年份<30岁)||
(2015年-出生年份==30和9月-出生月份<0)||
(2015年-出生年份==30岁和9月-出生月份==0岁和18岁-出生日<0))
abc=“je”;

最简单的方法是实现/使用“两个日期之间的天数”功能。如果几天内的错误对您的任务是可接受的,您可以这样使用它:

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
为此,您可以阅读以下问题:

  • ,
  • ,
  • ,

  • 你想要达到的是,如果某个人的一天超过30年,那么字符串将是,
    abc='u'
    ,否则它将是
    abc=“je”

    现在您使用的方法是静态的,即您在程序中使用特定日期。您可以在C++中使用<代码> cTime/Cuo>库很容易地解决上述问题。
    这是您正在搜索的程序。我希望这会有所帮助:)

    我想你可能真的需要与今天的日期进行比较,所以使用
    std::chrono
    和-后者将日期解压成一个给你的:请在链接的文档中注意,年和月分别以1900和0为基础

    可以方便地将值分组为一个
    元组
    ,以便于比较,这样,如果最左边的值相等,它将考虑右边的值,依此类推

    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+…
    值。

    首先,我会将出生日期转换为自纪元起的毫秒,并与自纪元起的当前时间进行比较。这将大大简化您的代码,因为您将有一个地址类型测试

    这个线程解释了这个过程

    然后你可以简单的


    如果(ageInMillistics>=FormalAgeinMillistics)

    谢谢,我需要编写代码“两个日期之间的天数”的演示文稿-只要你不关心闰年,或者考虑到这一点,而不是使用建议的
    30*365
    ,是的。@TonyD,谢谢你指出这一点!是的,我想,在这项任务中,几天之内犯下的错误是可以接受的。我已经更新了我的答案。
    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";