2011-10-18 7 views
0

나는 년과 월이 들어있는 char *을 사용하여 YYYYMM이라고 말할 수 있습니다. 01 ~ 12의 범위 내에서 MM을 어떻게 비교합니까? 하위 문자열에 대해 atoi를 수행해야합니까? 아니면 다른 것이 있습니까?유효한 배열로 char 배열의 부분 문자열을 비교하는 방법은 무엇입니까?

+0

가 일반적으로 사용하거나 구성 될 수있는 날짜 객체를 설계하는 더 나은 것 ++ 다양한 형식. – AJG85

답변

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')); 
} 
+0

David와 Lou 덕분입니다. 그것은 도움이되었다! – user1001939

+0

올바른 범위의 오타 및 가정을 제외하고 이것은 올바른 생각입니다. – AJG85

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으로) 저장하는 방법에 정말로 달려 있다고 생각한다.

-1

변수가 "pstr"라고하며 널 (null) 당신이 할 수있는 MM 후 종료하여 문자 * 가정 :

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

-1 :이 접근법은''20111Z "'와''19999 #"'이 유효하다고 말할 것입니다. –

관련 문제