Проверка даты и преобразование в переполнении стека

Я должен написать 2 функции. Тот, который принимает дату в виде строки и проверяет ее в формате мм / дд / гг; если это не в правильном формате, это должно быть отредактировано, чтобы сделать это так. Другая функция должна преобразовать проверенную дату в формат «Месяц дд, 20гг».

Я почти уверен, что смогу позаботиться о второй функции, но у меня возникли проблемы с первой. Я просто понятия не имею, как проверить, если это в этом формате … какие-нибудь идеи?

Я думал, что это будет работать, но это не похоже …

Обновленный код:

bool dateValidation(string shipDate)
{
string temp;
if(shipDate.length() == 8 )
{
if(shipDate[2] == '/' && shipDate[5] =='/')
{
int tempDay, tempMonth, tempYear;
//Gather month
temp = shipDate[0];
temp += shipDate[1];
//convert string to int
tempMonth = temp.atoi;
temp = "";

//Gather day
temp = shipDate[3];
temp += shipDate[4];
//convert string to int
tempDay = temp.atoi;
temp = "";

//Gather year
temp = shipDate[6];
temp += shipDate[7];
//convert string to int
tempYear = temp.atoi;
temp = "";

if(tempMonth > 0 && tempMonth <= 12)
{

if(tempMonth == 9 ||
tempMonth == 4 ||
tempMonth == 6 ||
tempMonth == 11 ||)
{
if(tempDay > 0 && tempDay <= 30)
{
if 30 days
}
}
else if(tempMonth == 2)
{
if(tempDay > 0 && tempDay <= 28)
{
if 28 days
}
}
else
{
if(tempDay > 0 && tempDay <= 31)
{
if 31 days
}
}
}
}
}
}

-1

Решение

Есть 4 вещи, которые вы хотите проверить:

  • Есть ли 8 символов? Если нет, то даже не надо проверять что-либо еще. Это не в правильном формате.
  • Являются ли третий и пятый символы «/». Если нет, то у вас все еще нет правильного формата.
  • Проверьте каждую пару на предмет допустимых значений. В месяце есть дни от 1 до
    Не более 31, не более 12 месяцев и месяцев от 01
    до 12. Год может быть любой комбинацией любых двух цифр.

Это должно заботиться о формате, но если вы хотите убедиться, что дата действительна:

  • Проверьте действительное количество дней в каждом месяце (31 января, февраль
    28-29 …) и действительно проверь эти високосные годы.
0

Другие решения

Это очень похоже на проект, который я собираюсь оценивать …. Вы должны убедиться, что он соответствует григорианскому календарю, если это проект, который я собираюсь оценивать. 01.01.2012, безусловно, действителен, поэтому вы, возможно, захотите сделать, и я надеюсь, что вы подумаете о создании оператора switch, который проверяет форматы, такие как 1/12/2012 и 10/2/2012, потому что они действительны. Затем проанализируйте день месяца и год из них. Затем убедитесь, что они находятся в пределах границ григорианского календаря. Если это для класса, который, как я догадался бы, так и есть, вам следует рассмотреть возможность написания проверки как отдельной функции от функции синтаксического анализа.

Поэтому сначала спросите, слишком ли длинна дата, если нет, слишком ли она коротка, если нет, то какая это версия, а затем передайте dm y в функцию проверки. Такая модульность упростит ваш код и сократит количество инструкций.

что-то вроде

bool dateValidation (строка shipDate)
{
темп строки;

switch(shipDate.length())
{
case(10):
// do what  your doing
verify(m,d,y);
break;

case(8):
//dealing with single digits
// verify 1 and 3 are '/' and the rest are numbers
verifiy(m,d,y);
break;

case(9):
//a little more heavy lifting here
// but its good thinking for a new programmer
verifiy(m,d,y);
break;
default:

//fail message
break;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector