我正在编写一个函数,用于检查字符串是否为有效日期。
我传入任意随机字符串,例如:“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]);
}
非常欢迎任何帮助或想法。
答案 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 可能很危险,但它可以为您服务。