我在写一个C++日期类的题目时在指令2是需要以一定的格式输出日期,比如
input:2 21 SEPTEMBER 2001
output:moonLanding = 21-Sep-2001
然而我的输出却是:moonLanding = 3276916-?2001
我第一次自己差的时候发现monthtoString()的方法有点问题,不会输出一个月份的字符串,但是我看了看又没看出毛病?
再检查的时候输出day的时候好像也出问题了。
我检查了几遍但是没能确定问题出在哪里,因为代码比较长我把相关的代码摘出来。希望能帮忙看看?
#include <string>
#include <iostream>
#include "lib.h"
#include "calendar.h"
using namespace std;
std::string integerToString(int n) {
std::ostringstream stream;
stream << n;
return stream.str();
}
Month stringToMonth(string s)
{
Month mon;
if (s == "JANUARY") {
mon= JANUARY;
}
if (s == "FEBRUARY") {
mon= FEBRUARY;
}
if (s == "MARCH") {
mon= MARCH;
}
if (s == "APRIL") {
mon= APRIL;
}
if (s == "MAY") {
mon= MAY;
}
if (s == "JUNE") {
mon= JUNE;
}
if (s == "JULY") {
mon= JULY;
}
if (s == "AUGUST") {
mon= AUGUST;
}
if (s == "SEPTEMBER") {
mon= SEPTEMBER;
}
if (s == "OCTOBER") {
mon= OCTOBER;
}
if (s == "NOVEMBER") {
mon= NOVEMBER;
}
if (s == "DECEMBER") {
mon= DECEMBER;
}
return mon;
}
string monthToString(Month month)
{
// TODO
//change the month to string
string s;
if(month==JANUARY){
s="JANUARY";
}
else if(month==FEBRUARY){
s="FEBRUARY";
}
else if(month==MARCH){
s="MARCH";
}
else if(month==APRIL){
s="APRIL";
}
else if(month==MAY){
s="MAY";
}
else if(month==JUNE){
s="JUNE";
}
else if(month==JULY){
s="JULY";
}
else if(month==AUGUST){
s="AUGUST";
}
else if(month==SEPTEMBER){
s="SEPTEMBER";
}
else if(month==OCTOBER){
s="OCTOBER";
}
else if(month==NOVEMBER){
s="NOVEMBER";
}
else if(month==DECEMBER){
s="DECEMBER";
}
return s;
}
Date::Date()
{
initDate(1, JANUARY, 1900);
}
Date::Date(int day, Month month, int year)
{
initDate(day, month, year);
}
Date::Date(Month month, int day, int year)
{
initDate(day, month, year);
string Date::toString()
{
// TODO
string re;
string mon;
mon =monthToString(month);
//cout<<mon<<endl;
//lower case
mon[1]=tolower(mon[1]);
mon[2]=tolower(mon[2]);
//deal with the string
string mmm;
mmm=mon[0]+mon[1]+mon[2];
//cout<<day<<endl;
//cout<<year<<endl;
re=integerToString(day)+"-"+mmm+"-"+integerToString(year);
return re;
}
void Date::initDate(int day, Month month, int yyyy)
{
// TODO
day=day;
month=month;
year=yyyy;
}
int main()
{
int id;
cin >> id;
int day, year;
string mon;
cin >> day >> mon >> year;
if (id == 1)
{
for (Month month = JANUARY; month <= DECEMBER; month = Month(month + 1))
{
cout << monthToString(month) << " has " << daysInMonth(month, year)
<< " days." << endl;
}
}
else if (id == 2)
{
Date moonLanding(day, stringToMonth(mon), year);
cout << "moonLanding = " << moonLanding.toString() << endl;
}
else if (id == 3)
{
Date moonLanding(day, stringToMonth(mon), year);
cin >> mon >> day >> year;
Date kennedyAssassination(stringToMonth(mon), day, year);
cin >> mon >> day >> year;
Date newYearsEve(stringToMonth(mon), day, year);
cin >> day >> mon >> year;
Date inaugurationDay(day, stringToMonth(mon), year);
cin >> day >> mon >> year;
Date electionDay(day, stringToMonth(mon), year);
cout << "moonLanding = " << moonLanding << endl;
cout << "kennedyAssassination = " << kennedyAssassination << endl;
cout << boolalpha;
cout << "moonLanding < kennedyAssassination = "
<< (moonLanding < kennedyAssassination) << endl;
cout << "moonLanding > kennedyAssassination = "
<< (moonLanding > kennedyAssassination) << endl;
cout << "moonLanding == kennedyAssassination = "
<< (moonLanding == kennedyAssassination) << endl;
cout << "moonLanding == moonLanding = "
<< (moonLanding == moonLanding) << endl;
cout << "inaugurationDay - electionDay = "
<< (inaugurationDay - electionDay) << endl;
Date day = newYearsEve;
cout << "New Year's Eve = " << day++ << endl;
cout << "New Year's Day = " << day << endl;
for (Date d = electionDay; d <= inaugurationDay; d++)
{
cout << d << endl;
}
}
}