`
桔红糕
  • 浏览: 41389 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

题0901

    博客分类:
  • CPP
阅读更多
引用
写一个能自动将地球上主流的日期格式转换成三进制形式的C++程序
你的程序应支持如下的日期格式:
dd-mm-yy
dd-Mon-yy
dd-mm-yyyy
dd-Mon-yyyy
除此以外的日期格式可被认为格式错误而不予转换。合法的月份的三位缩写为:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov和Dec。
程序要求:
实现一个名为CternaryDate的类;
实现一个参数类型为一个string的引用的构造函数(或实现一个参数为char*的构造函数),参数为表示十进制日期的字符串;
实现一个名为IsValid()的成员方法,表明当前是否是一个正确的三进制日期对象;
实现三个名为TernaryYear()、TernaryMonth()和TernaryDay()的成员方法,返回三进制的年、月和日
实现前缀和后缀形态的++运算符,含义为计算当前日期的下一日(2月以28天计,不考虑闰年)。

输入文件:c:\1_in.txt。第一行为该文件中包含的日期的总数,然后依次每行为一个十进制日期的字符串。
输出文件:c:\1_out.txt。首行08XXXX应替换为本人的学号,第二行起每行输出一个三进制的日期,若对应该行的输入日期数据为偶数行,则使用++运算符补充输出一行该日期的下一日,格式为“The next date of 原日期 is 后一日”。若输入的十进制日期格式错误,则本行的输出为“Not Valid”;若同时错误数据也为偶数行,则忽略下一日的输出。
输入样例:C:\1_in.txt
3
20-Jun-75
03-05-70
05/01/2006

输出样例:C:\1_out.txt
Done by 08XXXX
202-20-2210
The next date of 202-20-2210 is 210-20-2210
10-12-2121
Not Valid


这个题目也太复杂了吧~~
基础知识:
1)文件输入输出 fstream
2) 字符串解析
string, find, substr
3) 面向对象的类创建,类的成员方法和成员变量
class CTernaryDate
{
public:
	bool IsValid() const;

	const char * TernaryYear(char *) const;
	const char *  TernaryMonth(char *) const;
	const char *  TernaryDay(char *) const;
private:
	int year;
	int month;
	int day;

	bool isValid;
};

4)带参构造函数
public:
	CTernaryDate(const char * str);

5)运算符重载,++的前后置区别
	
	CTernaryDate &operator ++();
	CTernaryDate operator++(int);

6)<<运算符重载,它不是类的成员函数
std::ostream & operator<<(std::ostream & os, const CTernaryDate& date);

7)10进制转3进制
我用的是itoa中自带的三进制转换,如果不知道的话可以自己写
8)stl,find方法
我还用到stl的find方法,check是否是小月份
bool CTernaryDate::checkMonth(int month, int day)
{
	if (month==0 || month>12) return false;
	if (day>28 && month == 2) return false;
	if( (find(&shortMonth[0], &shortMonth[5], month) != &shortMonth[5]) && day==31)
		return false;
}


9)代码有点长,还要了解如何调试代码,才可能达到最后结果
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics