如何检查字符串是否是C中的有效日期

时间:2013-11-18 03:53:12

标签: c validation

我正在编写一个函数,用于检查字符串是否为有效日期。

我传入任意随机字符串,例如:“ted”或11/34/67或9/10/13

在该功能中,有效月份为1-12,有效日期为1-31。

我的想法是按字符逐字逐句查询。我会检查第一个字符,看它是否是一个数字然后将其转换为int,如果是的话。然后我会测试它是否是一个有效的整数。但是,我在将字符转换为int时遇到了麻烦。

int isDate(char* string)
{
     int num;
     if(isdigit(string[0]))
          num = strtol(string[0]);

}

非常欢迎任何帮助或想法。

2 个答案:

答案 0 :(得分:0)

问题是:

num = strtol(string[0]);

string[0]不是字符串,而是char

使用这种方式:

num = string[0] - '0';

答案 1 :(得分:0)

您确实可以使用strol来获取部分日期,请参阅man 3 strol

int isDate(char* string)
{
    char *endptr;
    int base = 10;
    int year, month, day;

    month = strtol(string, &endptr, base);
    /* check month range here, return something on error */
    printf("month: %d\n", month);

    if (endptr[0] == '/') {
        year = strtol(endptr + 1, &endptr, base);
        /* check year range ... */
        printf("year: %d\n", year);
    } else {
        /* no year, error ... */
    }
    if (endptr[0] == '/') {
        day = strtol(endptr + 1, &endptr, base);
       /* check day range ... */
        printf("day: %d\n", day);
    } else {
        /* no day, error ... */
    }

    /* success, return something */
}

您可能还需要检查 strtol()调用是否有错误,请参阅联机帮助页。发送 endptr + 1 可能很危险,但它可以为您服务。