以 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 格式存储日期的文本列,以删除日期格式