题0901

[quote]写一个能自动将地球上主流的日期格式转换成三进制形式的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
[/quote]

这个题目也太复杂了吧~~
基础知识:
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)代码有点长,还要了解如何调试代码,才可能达到最后结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值