C++ primer 第五版 中文版 练习 9.51 个人code

本文介绍了如何为C++ Primer第五版中的练习9.51设计一个日期类,该类能够解析不同格式的日期字符串,如'January 1,1900'、'1/1/1900'和'Jan 1 1900'。提供的构造函数使用简单的匹配方法来处理这些格式,但未实现月份英文到数字的转换。" 115815035,10544600,MATLAB深度学习工具包:包括RBM、DBN、CNN等代码,"['深度学习', 'MATLAB', 'RBM', '神经网络', 'CNN']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ primer 第五版 中文版 练习 9.51

题目:设计一个类,它有三个unsigned成员,分别表示年、月、日。为其编写构造函数,接受一个表示日期的string参数。
你的构造函数应该能处理不同的数据格式,如 January 1,1900、1/1/1900、Jan 1 1900 等。


答:以下代码只能针对本题给出的这三种格式来处理,由于本人智商略低……用最笨的办法来实现了本题的要求,仅能处理本题给出的三种格式,且没有把月份的英文形式转换成数字形式。

/*
设计一个类,它有三个unsigned成员,分别表示年、月、日。为其编写构造函数,接受一个表示日期的string参数。
你的构造函数应该能处理不同的数据格式,如 January 1,1900、1/1/1900、Jan 1 1900 等。
*/


#include <string>
#include <iostream>

using namespace std;

class MyDate
{
public:
	MyDate() = default;
	MyDate(const string &s)
	{
		string month, day, year;
		string::size_type pos = 0, pos1 = 0;
		auto iter = s.begin();
		if ((pos = s.find_first_of("/")) != string::npos)
		{
			month.assign(iter, iter + pos);
			pos1 = s.find_first_of("/", pos+1);
			day.append(iter + pos+1, iter + pos1);
			year.append(iter + pos1+1, s.end());
		}
		else if ((pos = s.find_first_of(",")) != string::npos)
		{
			pos= s.find(" ");
			month.assign(iter, iter + pos);
			pos1 = s.find_first_of(",");
			day.assign(iter + pos + 1, iter + pos1);
			year.assign(iter + pos1 + 1, s.end());
		}
		else if ((pos = s.find_first_of(",/")) == string::npos)
		{
			pos = s.find(" ");
			month.assign(iter, iter + pos);
			pos1 = s.find(' ', pos+1);
			day.assign(iter + pos, iter + pos1);
			year.assign(iter + pos1 + 1, s.end());
		}
		Year = stoi(year, 0);
		Month = stoi(month, 0);
		Day = stoi(day, 0);
	}
	~MyDate(){}
	void display()
	{
		cout << Year << " "<<Month<<" " << Day;
	}
private:
	unsigned Year;
	unsigned Month;
	unsigned Day;
};

int main()
{
	string str = "12/2/1990";
	string str1 = "10 2,1990";
	string str2 = "12 30 1990";
	MyDate mydate(str);
	MyDate mydate1(str1);
	MyDate mydate2(str2);

	mydate.display();
	cout << endl;
	mydate1.display();
	cout << endl;
	mydate2.display();
	cout << endl;

	return 0;

}

执行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值