2013-05-01 2 views
0

I는 다음과 같은 형식으로 일부의 데이터를 포함하는 문자열을 파싱해야일련의 직사각형 데이터가 포함 된 문자열을 구문 분석하는 방법은 무엇입니까?

  • 문자열에 지정된 화상은 0 개, 1 개 이상의 직사각형과 연관되고;
  • 사각형의 좌표는 괄호로 묶이고 쉼표로 구분 된 4 개의 정수로 구성됩니다.
  • 각 사각형은 쉼표로 다음 사각형과 구분됩니다.
  • 문자열의 끝은 세미콜론입니다. 문자열

예 :

"image.png": (xmin, ymin, xmax, ymax), (xmin, ymin, xmax, ymax); 

I는 다음과 같은 정보 검색하고자 예 image.png 들어

  • 화상의 파일명을 포함하는 string 단계;
  • vector<Rect>은 직사각형의 시퀀스를 포함한다. 외부 라이브러리를 사용하지 않고,

    struct Rect 
    { 
        int xmin; 
        int ymin; 
        int xmax; 
        int ymax; 
    } 
    

    어떻게 간단한 방법으로 문제를 해결하는 :

사각형은 구조체 아래 정의?

+0

정규 표현식은 친구입니다. 이 특정 사례를 직접 구현하는 것이 번거롭고 왜 그런가요? 이것은 숙제/숙제입니까? –

+0

@Haroogan : 정규 표현식을 사용하는 방법은 무엇입니까? – enzom83

+1

[this] (http://en.cppreference.com/w/cpp/regex)를 참조하십시오. ** 참고 : ** 표준 라이브러리는 C++ 11을 준수해야합니다. –

답변

1

간단한 방법으로 문제를 해결하려면 스위치 케이스가있는 자동화를 사용할 수 있습니다. 상태는 10 개뿐입니다. 상태는 다음과 같습니다. INIT, 파일 이름, 콜론, PARENTHSIS, XMIN, YMIN , XMAX, YMAX, COMMA, ACCEPT. stateINIT입니다. 그래서 스위치의 경우 문은 다음과 같습니다

이 같은
ch = getNextChar(); 
switch(state) 
{ 
    case INIT: 
     if(ch == '\"') 
      state = FILENAME; 
     break; 
    case FILENAME: 
     if(ch != '\"') 
      filename.append(ch); 
     else 
      state = COLON; 
     break; 
    case COLON: 
    // more cases; 
    // ... 
    default: 
} 

, 당신은 쉽게 문자열을 구문 분석 할 수 있습니다.

+0

'WHITESPACE' 상태를 잊었습니다. –

0

시도해보십시오. 으로 :

clang++ -std=c++0x -stdlib=libc++ yourfile.cpp 

연타 3.3 지원의 정규 표현식에. 필요한 경우 Linux에서 실행됩니다.

관련 문제