【问题标题】:Extract the century of a date from a string从字符串中提取日期的世纪
【发布时间】:2020-07-08 21:21:41
【问题描述】:

我的任务是输出给定日期的当前世纪。日期可以表示为string;例如,19.03.2022

如何检索此类字符串的年份和世纪?

【问题讨论】:

  • 您将年份读取为 int,是否减一,这取决于您将 2000 年视为 20 世纪还是 21 世纪。然后除以 100(整数除法)并加 1。
  • 一年中的世纪很容易。从字符串中获取年份很复杂。您需要支持多少种日期格式?简单的(myString.match(/\b\d{4}\b/) || [])[0] 会支持很多。
  • 解释该代码 sn-p,我使用正则表达式来匹配单词边界 \b 后跟 4 位数字 \d{4} 后跟单词边界。如果有匹配项,则为 4 位数字。如果没有,|| [] 会给你一个空数组,然后当你第一次进入时会给你undefined
  • @Jeffrey 然后你删除你的评论中的回答并将它放在正确的地方,我们其他人可以对它进行同行评审
  • @asteroidswithwings 是的。我很懒。我只是想在不付出必要努力的情况下将 OP 指向正确的方向。评论中的回答不好吗?

标签: c++ string algorithm


【解决方案1】:
string date = "19.03.2022";
int century = (date[6] - '0') * 10 + (date[7] - '0');
if(date[8] != '0' || date[9] != '0') century++;
cout<<century<<endl;

输出:21

复杂度:O(1)

【讨论】:

  • 很好地解决了世纪之交的边缘案例。
【解决方案2】:

给定string 的年份始终包含在最后四个字符中,因此您可以使用string::substr 然后std::stoi 来检索年份:

string str = "19.03.2022";
int year = stoi(str.substr(6, 4)); // year = "2022"

之后,你可以使用year来计算世纪:

int century = year/100 + 1; // century = 21

【讨论】:

  • 在给出的示例中,年份在最后 4 个字符中。但在 ANSII 格式中,它将是前 4 个字符。
  • @btilly OP 没有提及“ANSII 格式”。
  • @AsteroidsWithWings 不,OP 只给出了 1 个日期示例。 OP 没有说这是否是唯一的格式。
  • @btilly 他们给出了输入和所需的输出。与许多不同的可能格式无关。您正在编造一个不是这个问题的不同问题。
  • @AsteroidsWithWings 所问的问题是,“我想从给定的字符串中找出哪个世纪。”从作为示例给出的字符串中,“它在 21 世纪”是一个有效的答案。您认为这是对所提问题的一个很好的回答吗?当然不是!为什么不?因为您知道必须处理其他字符串。这里的答案只适用于一种确切的格式,并且没有错误检查。
猜你喜欢
  • 2021-04-14
  • 1970-01-01
  • 2011-02-17
  • 2020-08-14
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多