Как сравнить день из библиотеки ctime с дневной строкой? - PullRequest
0 голосов
/ 14 октября 2018

Кто-нибудь знает, как сравнить день со строкой дня? Может показаться странным, но я подумал об этом. Надеюсь, код все прояснит

#include <iostream>
#include <ctime>
    int main()
    {
        /// current date/time based on current system
        time_t now = time(0);

        /// convert now to string form
       tm *ltm = localtime(&now);


        cout << "The local date and time is: " << ltm << endl;

        if(*ltm == "Mon") Monday();
        else if(*ltm == "Tue") Tuesday();
        else if(*ltm == "Wed") Wednesday();
        else if(*ltm == "Thu") Thursday();
        else if(*ltm == "Fri") Friday();
        else if(*ltm == "Sat" || *ltm == "Sun") Monday();




        return 0;
    }

, и это один изОгромное сообщение об ошибке, я даю только одну строку, потому что остальные ошибки одинаковы, но для разных строк.

/home/shadowdragon/Documents/uktc_schdule/UKTC_schedule/main.cpp|90|error: no match for ‘operator==’ (operand types are ‘tm’ and ‘const char [4]’)|

1 Ответ

0 голосов
/ 14 октября 2018

Вам даже не нужно сравнивать ее со строкой (то есть const char*) ... <ctime> предоставляет свой собственный метод для сравнения всего этого ...

Во-первых, создайте счетчик, который отслеживает все дни недели (0-6),

enum
{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

Теперь проверьте это следующим образом:

if (*ltm.tm_wday == Sunday)
    std::cout << "Its Sunday!" << std::endl;

Сделайте то же самое дляи в другие дни ...

Если вы присмотритесь, вы увидите, что член структуры tm_wday возвращает число в диапазоне 0-6 ( Воскресенье до Понедельник ) и перечислитель просто уточнить это ... (чтобы не путать с if (*ltm.tm_wday == 0 /*Sunday*/) или чем-то в этом роде).)

Подробнее о структуре tm здесь ...

Существует даже C ++ альтернатива здесь ...

Примечание: std::tm дает точное время UTC, поэтому рекомендуется проверить его и использовать эту функцию вместо localtime()как указано в разделе комментариев ...


Редактировать: Если у вас есть , чтобы сравнить его со строкой ... тогда, возможно, функция может помочь ...
const char * GetDay(struct tm * tm)
{
    switch (tm->tm_wday)
    {
        case 0:
            return "Sun";
        case 1:
            return "Mon";
        case 2:
            return "Tue";
        case 3:
            return "Wed";
        case 4:
            return "Thu";
        case 5:
            return "Fri";
        case 6:
            return "Sat";
        default: return "";
    }
}

Затем сделайте что-то вроде:

if (GetDay(ltm) == "Sun")
    std::cout << "Its Sunday again!" << std::endl;

С уважением,

Ruks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...