如何比较char数组中的子字符串与一些有效范围?

时间:2011-10-18 20:18:56

标签: c++

我有一个char *,其中包含年份和月份,请说YYYYMM。如何比较01到12范围内的MM?我是否必须为子串执行atoi并执行此操作或存在其他任何内容?

3 个答案:

答案 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
}