我有一个char *,其中包含年份和月份,请说YYYYMM。如何比较01到12范围内的MM?我是否必须为子串执行atoi并执行此操作或存在其他任何内容?
答案 0 :(得分:1)
如果字符串的月份部分的第一个字符为“0”,则第二个字符必须介于“1”和“9”之间,才有效。如果第一个字符为“1”,则第二个字符必须介于“0”和“2”之间,才有效。任何其他初始字符都无效。
代码
bool valid_month (const char * yyyymm) {
return ((yyymm[4] == '0') && (yyymm[5] >= '1') && (yyymm[5] <= '9')) ||
((yyymm[4] == '1') && (yyymm[5] >= '0') && (yyymm[5] <= '2'));
}
答案 1 :(得分:0)
您可以执行子字符串的atoi(),也可以简单地比较ASCII值。例如:
if (buf[4] == '0')
{
// check buf[5] for values between '1' and '9'
}
else if (buf[4] == '1')
{
// check buf[5] for values between '0' and '2'
}
else
{
// error
}
无论哪种方式都可以接受。我想这实际上取决于你最终如何存储信息(如int或string)。
答案 2 :(得分:-1)
假设您的char *变量被称为“pstr”并且在MM之后空终止,您可以这样做:
int iMon = atoi(pstr + 4);
if ( (iMon >= 1) && (iMon <= 12) )
{
// Month is valid
}