C++ 如何将char数组中的子字符串与有效范围进行比较?
我有一个字符*包含年和月,比如说YYYYMM。如何比较01到12范围内的MM?是否必须为子字符串执行atoi并执行该操作或存在其他任何操作?如果字符串的月份部分的第一个字符为“0”,则第二个字符必须介于“1”和“9”之间(包括“1”)才有效。如果第一个字符为“1”,则第二个字符必须介于“0”和“2”之间(包括“0”)才有效。任何其他初始字符都无效 编码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[
您可以对子字符串执行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
}