2012-07-24 4 views
0

내 XML 파일에 다음과 같이 작성된 int 배열이 있습니다. "1 10 -5 150 35"이고 pugixml을 사용하여 구문 분석합니다.Pugixml - xml 요소 내용을 C++ 배열로 변환

pugixml은 as_bool 또는 as_int와 같은 메소드를 제공하지만 int 배열의 문자열 표현을 C++ 객체로 변환하는 쉬운 방법을 제공합니까, 아니면 구문 분석하고 문자열을 직접 분리해야합니까? 그렇다면 어떻게해야하는지에 대한 제안 사항이 있습니까?

+0

C++ 배열 또는'std :: vector '? – hmjd

+1

각 요소가 정확히 공백으로 구분되는 경우 split 함수를 사용하여 개별 요소를 가져옵니다 (std :: strings와 같이). 이 사이트에서 해당 기능을 검색하십시오. 그런 다음 strtol을 사용하여 std :: string을 int로 변환 할 수 있습니다. –

+0

바람직하게는 표준 : 벡터 . – Lanaru

답변

3

가능성은 std::istringstream입니다. 예 :

#include <iostream> 
#include <string> 
#include <sstream> 
#include <vector> 
#include <algorithm> 
#include <iterator> 

int main() 
{ 
    { 
     std::istringstream in(std::string("1 10 -5 150 35")); 
     std::vector<int> my_ints; 

     std::copy(std::istream_iterator<int>(in), 
        std::istream_iterator<int>(), 
        std::back_inserter(my_ints)); 
    } 

    // Or: 
    { 
     int i; 
     std::istringstream in(std::string("1 10 -5 150 35")); 
     std::vector<int> my_ints; 
     while (in >> i) my_ints.push_back(i); 
    } 
    return 0; 
} 
+0

이 코드는 std :: istringstream :: in을 두 번째 매개 변수로 std :: istringstream 생성자에 추가 할 때까지 컴파일되지 않습니다 (두 번째 예제에서). 그것없이 나에게 줄 것이다 "오류 C2296 : '>>': 불법, 왼쪽 피연산자 'std :: istringstream (__cdecl *) (std :: string)'"오류가 있습니다. – Lanaru

+0

@ Laanaru, g ++ 그걸로 벌금 : http://ideone.com/UCI1Y. 어떤 VC 버전을 사용하고 있습니까? – hmjd

+0

80x86 용 Microsoft (R) 32 비트 C/C++ 최적화 컴파일러 버전 16.00.40219.01. 중요한 부분은 생성자에 두 번째 매개 변수를 추가하고 나면 코드가 완벽하게 작동한다는 것입니다.하지만 처음에는 컴파일되지 않았다는 사실이 다소 수수께끼 일뿐입니다. – Lanaru