2013-12-18 2 views
9

공백으로 구분 된 정수를 포함하는 문자열이 있습니다. 예를 들어문자열을 int의 벡터로 구문 분석

string myString = "10 15 20 23"; 

정수로 변환하고 싶습니다. 예에서 벡터는 동일해야합니다

vector<int> myNumbers = {10, 15, 20, 23}; 

어떻게하면됩니까? 바보 같은 질문에 사과드립니다.

+0

사용'부스트 : split_regex' – Blacktempel

+0

@juanchopanza 당신이 친절하게 설명 할 수있는 방법 ** 문자열로 분할 * *는 int ***의 *** 벡터로 분할하는 것과 동일하게 간주됩니까? –

+0

@jrok 단순히 문자열을 분할하고 동시에 문자열을 변환하는 것과 유형을 변환하는 것 사이에는 큰 차이가 있습니다. –

답변

17

std::stringstream을 사용할 수 있습니다. 다른 포함 사항과 다른 점은 #include <sstream>입니다.

#include <sstream> 
#include <vector> 
#include <string> 

std::string myString = "10 15 20 23"; 
std::stringstream iss(myString); 

int number; 
std::vector<int> myNumbers; 
while (iss >> number) 
    myNumbers.push_back(number); 
+0

include 문도 추가하면이 대답이 훨씬 나아질 것입니다. – Wolf

+0

@Wolf 예 지적 해 주셔서 감사합니다. 추가됨. –

+0

나는 모든 것을 (+ 벡터) - 그리고 컴파일하는데 필요한 [using using declarations] (http://en.cppreference.com/w/cpp/language/using_declaration)을 의미한다. 내 (+1) 준비 :) – Wolf

0

이것은 다른 답변과 거의 같습니다.

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

int main(int argc, char* argv[]) { 
    std::string s = "1 2 3 4 5"; 
    std::istringstream iss(s); 
    std::vector<int> v{std::istream_iterator<int>(iss), 
         std::istream_iterator<int>()}; 
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); 
} 
+0

'std :: copy'를 사용할 필요가 없다. 왜냐하면'std :: vector'는 두 개의 반복자 (std :: copy와 똑같이)를 사용하는 생성자를 가지고 있기 때문입니다. –

+1

또한 * for old * for 루프는 출력에 * 포함되지 않아야합니다. * 쉽지 않기 때문입니다. – Wolf

5
std::string myString = "10 15 20 23"; 
std::istringstream is(myString); 
std::vector<int> myNumbers(std::istream_iterator<int>(is), std::istream_iterator<int>()); 
또는 대신 마지막 줄의

벡터가 벌써 정의 된 경우

myNumbers.assign(std::istream_iterator<int>(is), std::istream_iterator<int>()); 
+2

마지막 줄을 std :: vector로 작성하는 것이 더 정확합니다. myNumbers ((std :: istream_iterator (is)), std :: istream_iterator ()); 즉, 첫 번째 인수를 괄호로 묶어야합니다. 그렇지 않으면 벡터 정의 대신 함수 선언이됩니다. :) –

+2

또는 해당 문제를 해결하기 위해 설계된 이니셜 라이저 목록 구성을 사용할 수 있습니다. 'std :: vector myNumbers {std :: istream_iterator (is), std :: istream_iterator ()}' –