以 mm/dd/yyyy 格式输入日期并分成 3 个单独的变量?

Posted

技术标签:

【中文标题】以 mm/dd/yyyy 格式输入日期并分成 3 个单独的变量?【英文标题】:Take input of date in format mm/dd/yyyy and split into 3 separate variables? 【发布时间】:2015-02-16 15:40:03 【问题描述】:

我正在尝试弄清楚如何进行一些日期验证。我需要能够以 mm/dd/yyyy 的形式从用户那里获取输入,并用它进行各种计算以确定有效性。但是,在我得到输入后,我无法弄清楚如何将日期分成三个变量日、月、年。我玩过 getline 和 get 函数,但我想不通。感谢新手的任何帮助。 PS 我不想使用任何内置的日期验证功能。

int main()

    char fill = '/';
    string entered_date;
    int entered_month;
    int entered_year;
    int entered_day;

    cout << "Enter a date (mm/dd/yyyy): " << endl;
    cin >> entered_date;
    //getline(month, 2, '/');  < fix me


    //cout << entered_month << "/" << entered_day << "/"
    //  << entered_year << endl;
    system("Pause");


【问题讨论】:

【参考方案1】:

在这种情况下,您可以使用 scanf,因为它提供的功能比 cin 多得多。

int mm, dd, yyyy;
scanf("%d/%d/%d", &mm, &dd, &yyyy);

这应该可以解决问题。

编辑:另一种方法是以字符串的形式获取整个输入,然后找到子字符串并验证每个部分。

string date;
cin >> date;
string delimiter = "/"; 
auto start = date.begin(); // iterator at beginning of string
auto finish = date.find(delimiter); // gives position of first occurrence of delimiter
if (finish == date.npos) // find returned the end of string
  // delimiter does not exist in string.
else
  int month = stoi(date.substr(0, finish)); // Extracts month part from date string
date = date.substr(finish+1); // Removes the month part from the date string
// Understand this piece and write further ahead.

如果您知道您的输入是正确的,请使用第一部分,因为它会更快。如果有可能输入不正确,请使用第二个,因为它会更健壮。

【讨论】:

我也在考虑这个问题,但是如果日期格式无效怎么办?据我所知,他想验证日期 对其进行了编辑,使其可用于日期验证。 当我使用 int 而不是 auto 我得到警告【参考方案2】:

最简单的方法是使用std::string::substr,然后调用stoi

#include <string>
#include <iostream>

using namespace std;

int main()

    char fill = '/';
    string entered_date;
    int entered_month;
    int entered_year;
    int entered_day;

    cout << "Enter a date (mm/dd/yyyy): " << endl;
    cin >> entered_date;
    entered_month = stoi(entered_date.substr(0,2));
    entered_day = stoi(entered_date.substr(3,2));
    entered_year = stoi(entered_date.substr(6));

现场示例:http://ideone.com/PWyh8J

【讨论】:

以上是关于以 mm/dd/yyyy 格式输入日期并分成 3 个单独的变量?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期

我需要在 Access 中拆分以 MM/YYYY 和 MM/DD/YYYY 格式存储日期的文本列,以删除日期格式

角反应形式材料日期选择器手动输入格式DD/MM/YYYY

使用 PHP 将 mm/dd/yyyy 格式转换为纪元

将输入日期数据类型更改为 DD/MM/YYYY 而不是 MM/DD/YYYY 需要 [重复]

混合和匹配数据类型以生成所需的日期格式 mm/dd/yyyy