2011-08-12 4 views
1

데이터와 시간을 지정하는 서버에서 string such as "2011-08-12,02:06:30"을 받고 있습니다.정수를 문자열로 변환하는 방법

그러나

int year = 2011, month =08, day = 14, h = 02, min = 06, sec=30처럼 INT 저장으로 변환하는 방법에 대해 설명합니다.

+1

문자열을 날짜/시간 개체로 구문 분석하려는 것처럼 들립니다. –

답변

4

++.

#include <iostream> 
// for use of class stringstream 
#include <sstream> 

using namespace std; 

int main() 
{ 
    string str = "2011-08-12,02:06:30"; 
    stringstream ss(str); 
    int year, month, day, h, min, sec; 

    ss >> year; 
    ss.ignore(str.length(), '-'); 
    ss >> month; 
    ss.ignore(str.length(), '-'); 
    ss >> day; 
    ss.ignore(str.length(), ','); 
    ss >> h; 
    ss.ignore(str.length(), ':'); 
    ss >> min; 
    ss.ignore(str.length(), ':'); 
    ss >> sec; 

    // prints 2011 8 12 2 6 30 
    cout << year << " " << month << " " << day << " " << h << " " << min << " " << sec << " "; 
} 
+0

감사합니다. 일했습니다. – SPB

4

sscanf 함수를 사용하면 많은 도움이됩니다.

int year, month, day, h, min, sec; 
char * data = "2011-08-12,02:06:30"; 
sscanf(data, "%d-%d-%d,%d:%d:%d", &year, &month, &day, &h, &min, &sec); 
+0

+1 C 형식 문자열 io가 더 좋아야합니다. – Lalaland

+0

똑바로 그리고 믿을만한 :) – Perception

+0

Ahhh. 매개 변수를 입력하지 않아도 신뢰할 수 없습니다. 코드에서는보기가 쉽지만 큰 프로그램에서 seonds가 scanf()에서 긴 방법으로 정의 된 경우 버그 수정으로 int 유형에서 초 단위로 변경 될 수 있습니다. 그러나 위의 코드는 오류없이 컴파일됩니다. –

3

당신은 (여기 좋은 것 유한 상태 기계 디자인과 같은)에 필요한 구성 요소로 문자열을 구문 분석하는 자신의 문자열 파서를 쓸 수 중 하나, 또는 ...

가 재하지 마십시오 바퀴를 발명하고 Boost Date & Time 라이브러리와 같은 것을 사용하십시오.

1

POSIX 호환 플랫폼에서 strptime() 기능을 사용하고 데이터를 struct tm 구조로 저장할 수 있습니다. struct tm의 형식으로 된 후에는 struct tm에 정의 된 시간 형식을 사용하여 다른 POSIX 함수를 활용할 수있는 몇 가지 추가적인 자유가 있습니다.

예를 들어, 문자열을 구문 분석하기 위해 다시 서버에서 전송되는 다음 할 수있는 : 당신은 C에서 stringstream 클래스를 사용할 수 있습니다

char* buffer = "2011-08-12,02:06:30"; 
struct tm time_format; 
strptime(buffer, "%Y-%d-%m,%H:%M:%S", &time_format); 
관련 문제