Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将char数组中的子字符串与有效范围进行比较?_C++ - Fatal编程技术网

C++ 如何将char数组中的子字符串与有效范围进行比较?

C++ 如何将char数组中的子字符串与有效范围进行比较?,c++,C++,我有一个字符*包含年和月,比如说YYYYMM。如何比较01到12范围内的MM?是否必须为子字符串执行atoi并执行该操作或存在其他任何操作?如果字符串的月份部分的第一个字符为“0”,则第二个字符必须介于“1”和“9”之间(包括“1”)才有效。如果第一个字符为“1”,则第二个字符必须介于“0”和“2”之间(包括“0”)才有效。任何其他初始字符都无效 编码 您可以对子字符串执行atoi操作,也可以简单地比较ASCII值。例如: if (buf[4] == '0') { // check buf[

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

如果字符串的月份部分的第一个字符为“0”,则第二个字符必须介于“1”和“9”之间(包括“1”)才有效。如果第一个字符为“1”,则第二个字符必须介于“0”和“2”之间(包括“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。

假设您的char*变量称为pstr,并且在MM之后以null结尾,您可以执行以下操作:

int iMon = atoi(pstr + 4);
if ( (iMon >= 1) && (iMon <= 12) )
{
  // Month is valid
}

感谢大卫和卢。那很有帮助!除了输入错误和有效边界的假设外,这是正确的想法。- 1:这种方法会说20111Z和19999是有效的。在C++中,通常使用或设计一个可以由不同格式构造的日期对象更好。
int iMon = atoi(pstr + 4);
if ( (iMon >= 1) && (iMon <= 12) )
{
  // Month is valid
}