2011-02-08 1 views
0

어떻게 const char *를 나눌 수 있습니까?split const char * in C++

const char에 저장된 날짜 패턴이 있습니다. 그것이 유효한지 아닌지 알고 싶습니다. const char *를 나눌 수 없으므로 어떻게해야합니까?

+0

'std :: string'은 옵션입니까? –

+0

질문이 모호합니다. const char *에서 날짜를 읽고 싶습니까? – Aamir

+0

왜'const char *'를 나눌 수 없습니까? 문자열은 수정할 수 없지만 문자열을 추출 할 수 있어야합니다. – templatetypedef

답변

2

시스템에있는 경우 또는 아마도 strptime()을 사용하여 문자 버퍼에서 일/월/년 필드를 구문 분석 할 수 있습니다. 당신은 어려움이있는 경우, 당신은 그들을 밖으로 시도하고 이후 구체적인 질문한다

std::istringstream is("2010/11/26"); 
int year, month, day; 
char c1, c2; 
if (is >> year >> c1 >> month >> c2 >> day && 
    c1 == '/' && c2 == '/') 
{ 
    // numeric date fields in year, month, day... 
    // sanity checks: e.g. is it really a valid date? 
    struct tm tm; 
    tm.tm_sec = tm.tm_min = tm.tm_hour = tm.tm_wday = tm.tm_yday = tm.tm_isdst = 0; 
    tm.tm_mday = day; 
    tm.tm_mon = month; 
    tm.tm_year = year; 
    time_t t = mktime(&tm); 
    struct tm* p_tm = localtime(&t); 
    if (p_tm->tm_mday == day && p->tm_mon == month && p->tm_year == year) 
     // survived to/from time_t, must be valid (and in range) 
     do something with the date... 
    else 
     handle date-like form but invalid numbers... 
} 
else 
    handle invalid parsing error... 

: 당신은 또한 람, 다음 숫자 변수에 값을 스트리밍 성병 : : 이제 stringstream에 텍스트를 넣을 수 있습니다.

1

질문에 세부 정보를 추가해야합니다. 이제는 지나치게 광범위합니다. 일반적으로 boost::regex_match을 사용하여 주어진 정규 표현식이 주어진 문자 시퀀스 전체와 일치하는지 여부를 판단 할 수 있습니다.