Witam. Przychodzę z problemem z zadaniem ze SPOJa. Jest to zadanie "Formularz" - https://pl.spoj.com/problems/KC005/ . Program działa poprawnie, jednak SPOJ wyrzuca komunikat o błędnej odpowiedzi. Proszę o pomoc w zlokalizowaniu błędu. Zdaję sobie sprawę, że nie powinienem wstawiać całego kodu, lecz inaczej ciężko będzie znaleźć błąd. Po otrzymaniu odpowiedzi usunę kod, aby nie psuć zabawy innym.
#include <iostream>
#include <string>
using namespace std;
bool check_date(char date[])
{
string year, month, day;
year = date[0];
year += date[1];
year += date[2];
year += date[3];
month = date[5];
month += date[6];
day = date[8];
day += date[9];
for (int i = 0; i < 4; i++)
{
if (year[i] >= '0' && year[i] <= '9');
else return false;
}
for (int i = 0; i < 2; i++)
{
if (month[i] >= '0' && month[i] <= '9');
else return false;
}
for (int i = 0; i < 2; i++)
{
if (day[i] >= '0' && day[i] <= '9');
else return false;
}
int int_year = stoi(year);
int int_month = stoi(month);
int int_day = stoi(day);
if (int_year >= 1900 && int_year <= 2000 && int_month >= 1 && int_month <= 12 && int_day >= 1 && int_day <= 31) return 1;
else return 0;
return 0;
}
int main()
{
string form;
while (getline(cin,form))
{
bool first_name = 1;
bool last_name = 1;
bool date = 1;
int counter = 0;
char* pointer;
pointer = &form[0];
while (*pointer != ':') pointer++;
pointer++; pointer++;
if (*pointer >= 'A' && *pointer <= 'Z');
else first_name = false;
pointer++; pointer++;
while (*pointer != ';')
{
if (*pointer >= 'a' && *pointer <= 'z');
else first_name = false;
counter++;
pointer++;
if (counter >= 10) first_name = false;
}
while (*pointer != ':') pointer++;
pointer++; pointer++;
counter = 0;
if (*pointer >= 'A' && *pointer <= 'Z');
else first_name = false;
pointer++;
while (*pointer != ';')
{
if (*pointer >= 'a' && *pointer <= 'z');
else last_name = false;
counter++;
pointer++;
if (counter >= 20) last_name = false;
}
while (*pointer != ':') pointer++;
pointer++; pointer++;
char help[10];
for (int i = 0; i < 10; i++)
{
help[i] = *pointer;
pointer++;
}
date = check_date(help);
if (first_name == false) cout << 0 << endl;
else if (last_name == false) cout << 1 << endl;
else if (date == false) cout << 2 << endl;
else cout << 3 << endl;
}
return 0;
}