2014-12-09 2 views
-2

내 문제는 다음과 같습니다. 입력란에 공백으로 구분 된 숫자가 포함 된 거대한 문자열이 있습니다. 이 문자열을 분리하여 벡터에 요소를 넣은 다음 해당 요소를 사용해야합니다. (그런 다음 정수로 변환됩니다. bla bla ...).구성 요소를 벡터로 작성해야하는 분할 문자열

나는 이것을 여기에서 찾았지만 완전히 이해하지 못했고, 약간의 설명을하시기 바랍니다.

또 다른 질문 : 왜 다음과 같이 하나 이상의 "하위 문자열 :"을 반환합니까?

int main() 
{ 
    string s("10 20 30 50 2000"); 
    istringstream iss(s); 

    while (iss) 
    { 
     string sub; 
     iss >> sub; 
     cout << "Substring: " << sub << endl; 
    } 
    system("pause"); 
    return 0; 
} 
+1

['표준 : : 벡터 ::와 push_back()'(http://en.cppreference.com/w/cpp/container/vector/push_back) – 0x499602D2

+0

무엇처럼 보일 것이다 너의 질문? "제발 도와주세요" –

답변

2

이유를 다음 리턴 한 번 더 "하위 문자열"결국?

루프가 끊어졌습니다. 에서 스트림을 확인하기 전에을 읽습니다. 당신은 루프 문자열의 또 다른에 하위 문자열해야 그 후

int i = counter; 

for(size_t i = 0; i < s.size(); ++i) 
{ 
    if(' ' == s[i]) 
    { 
     ++counter; 
    } 
} 

:

0

첫째는이 같은 공백의 양을 계산 : 아래에 설명 된 바와 같이이 같은 문제입니다 .

0

는 다음과 같은 방법을 시도

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

int main() 
{ 
    std::string s("10 20 30 50 2000"); 

    std::istringstream is(s); 

    std::vector<std::string> v((std::istream_iterator<std::string>(is)), 
           std::istream_iterator<std::string>()); 

    for (const std::string &t : v) std::cout << t << std::endl;         

    return 0; 
} 

출력은 당신이 처음 타입 std::vector<int>을 필요로하고, 벡터 초기화 사용 반복자 std::istream_iterator<int>의 벡터를 정의 할 수

10 
20 
30 
50 
2000 

입니다.

두 번째 질문에 대해서는 문자열을 출력하기 전에 읽었는지 확인해야합니다. 그래서 올바른 루프는

string sub; 

while (iss >> sub) 
{ 
    cout << "Substring: " << sub << endl; 
}