Split const char * в C ++ - PullRequest
       2

Split const char * в C ++

0 голосов
/ 08 февраля 2011

Как я могу разделить const char *?

У меня есть шаблон даты, сохраненный на const char. Я хотел бы знать, является ли это действительным или нет. Так как я не могу разделить const char *, что мне тогда делать?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Вы можете легко использовать sscanf() или, возможно, strptime(), если ваша система имеет его, для анализа полей день / месяц / год из буфера символов. Вы также можете поместить текст в std :: stringstream, а затем передать значения в числовые переменные, ala:

std::istringstream is("2010/11/26");
int year, month, day;
char c1, c2;
if (is >> year >> c1 >> month >> c2 >> day &&
    c1 == '/' && c2 == '/')
{
    // numeric date fields in year, month, day...
    // sanity checks: e.g. is it really a valid date?
    struct tm tm;
    tm.tm_sec = tm.tm_min = tm.tm_hour = tm.tm_wday = tm.tm_yday = tm.tm_isdst = 0;
    tm.tm_mday = day;
    tm.tm_mon = month;
    tm.tm_year = year;
    time_t t = mktime(&tm);
    struct tm* p_tm = localtime(&t);
    if (p_tm->tm_mday == day && p->tm_mon == month && p->tm_year == year)
        // survived to/from time_t, must be valid (and in range)
        do something with the date...
    else
        handle date-like form but invalid numbers...
}
else
    handle invalid parsing error...

Если у вас возникли трудности, вы должны попробовать их и опубликовать конкретные вопросы.

1 голос
/ 08 февраля 2011

Вы должны добавить детали к своему вопросу, теперь он слишком широк. В общем, вы можете использовать boost::regex_match, чтобы определить, соответствует ли данное регулярное выражение всей данной последовательности символов.

...