C++ pointer Function Synopsis: char *amonthLess(char *dateString) Description: V
ID: 3555902 • Letter: C
Question
C++ pointer Function Synopsis: char *amonthLess(char *dateString) Description: Variable dataString is a valid date in a form of mm/dd/yyyy Given the above information, write a main() program that asks a user to enter a date in a form of mm/dd/yyyy, and then call function amonthLess() that passes the date variable as an argument. The function will subtract one month from the entered date. For simplicity, assume that the date entered by the user is a valid date. However, you must not assume that the date format entered is always correct. You must check that the date format is strictly followed. For example, if the date is 05/22/2008 then the function amonthLess() will return Apr 22, 2008. If the date is 01/23/2008 then the function returns Dec 23, 2007. A typical execution of the above program looks like the following; Enter a date in format mm/dd/yyyy (type q to quit): 3/23/2014 Invalid date format, try again. Enter a date in format mm/dd/yyyy (type q to quit): 03/23/2014 One month less from the date entered is: Feb 23, 2014 Enter a date in format mm/dd/yyyy (type q to quit): 01/03/2014 One month less from the date entered is: Dec 3, 2013
Explanation / Answer
#include <iostream>
using namespace std;
int main()
{
//PROTOTYPES
char *aMonthLess(char *dateString);
bool isValidDate(char *dateString);
//LOCAL DECLARATIONS
const int BUF_SIZE = 100;
char buf[BUF_SIZE];
//PROCEDURES
cout << "Enter a date in format mm/dd/yyyy (type q to quit): ";
cin.getline(buf, BUF_SIZE);
while (toupper(buf[0]) != 'Q')
{
if (isValidDate(buf))
{
char *oneMonthLess = aMonthLess(buf);
cout << "One month less from the date entered is: " << oneMonthLess << endl;
delete [] oneMonthLess;
}
else
{
cout << "Invalid date format, try again. ";
}
cout << " Enter a date in format mm/dd/yyyy (type q to quit): ";
cin.getline(buf, BUF_SIZE);
}
cout << endl;
cin.get();
return 0;
}
//---------------------------------------------------------
// FUNCTION DEFINITIONS
//---------------------------------------------------------
char *aMonthLess(char *dateString)
{
const char* monthShortName[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
int month;
int year;
//int day;
char *oneMonthLess = new char[13];
//0123456789
//mm/dd/yyyy
month = (dateString[0] - '0') * 10 +
(dateString[1] - '0');
year = (dateString[6] - '0') * 1000 +
(dateString[7] - '0') * 100 +
(dateString[8] - '0') * 10 +
(dateString[9] - '0');
//day = (dateString[3] - '0') * 10 +
// (dateString[4] - '0');
month--;
if (month == 0)
{
month = 12;
year--;
}
//if (month == 2)
//{
// //if day > 28
// //check leap year or not, if not return Feb 28, else return Feb 29
//}
//0123456789ab
//MMM dd, yyyy
oneMonthLess[0] = monthShortName[month - 1][0];
oneMonthLess[1] = monthShortName[month - 1][1];
oneMonthLess[2] = monthShortName[month - 1][2];
oneMonthLess[3] = ' ';
oneMonthLess[4] = dateString[3]; //short way without calculate day
oneMonthLess[5] = dateString[4]; //if day need to change for Feb then
//oneMonthLess[4] = (day / 10) + '0';
//oneMonthLess[5] = (day % 10) + '0';
oneMonthLess[6] = ',';
oneMonthLess[7] = ' ';
oneMonthLess[8] = (year / 1000) + '0';
year %= 1000;
oneMonthLess[9] = (year / 100) + '0';
year %= 100;
oneMonthLess[10] = (year / 10) + '0';
oneMonthLess[11] = (year % 10) + '0';
oneMonthLess[12] = '';
return oneMonthLess;
}
//---------------------------------------------------------
//---------------------------------------------------------
bool isValidDate(char *dateString)
{
bool isNumChar(char chr);
int size = 0;
for (char *ptr = dateString; *ptr != ''; ++ptr)
{
size++;
}
//0123456789
//mm/dd/yyyy
if (size != 10)
{
return false;
}
else if (!isNumChar(dateString[0]) ||
!isNumChar(dateString[1]) ||
!isNumChar(dateString[3]) ||
!isNumChar(dateString[4]) ||
!isNumChar(dateString[6]) ||
!isNumChar(dateString[7]) ||
!isNumChar(dateString[8]) ||
!isNumChar(dateString[9]) )
{
return false;
}
else if (dateString[2] != '/' || dateString[5] != '/')
{
return false;
}
else
{
return true;
}
}
//---------------------------------------------------------
//---------------------------------------------------------
bool isNumChar(char chr)
{
return (chr >= '0' && chr <= '9');
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.