2011-09-28 4 views
4

Java와 비슷한 C++ 용 분할 유형 함수가 있습니까? 나는 무시하는 것을 안다. 그러나 나는 그것을 이해하지 못한다. 그리고 그것이 내 사건에 어떻게 작용할 것인가.C++ 용 분할 함수

내 입력된다 : 주어진

{ 
    item = ball 
    book = lord of the rings 
    movie = star wars 
} 

내 입력이 <attribute> = <value>이고 I는 다른 캐릭터의 두 보관해야하거나, 값에 따라서 정수 (예를 들어, 그 경우 다수 정수를 사용하십시오).

+0

'무시'란 무엇을 의미하며 왜 템플릿이 문자열 분할과 관련이 있다고 생각합니까? std :: string에 대한 설명을 보려면 doc을 참조하십시오. – bmargulies

+0

@bmargulies'java' API에는'str.split ("=")'타입 함수가 있고'C++' API에는 cin.ignore (1, "=")'타입 함수가 있습니다. 내가 무시를 사용하여 시도했지만, 난 그냥 paranthese – SNpn

+1

가능한 중복 어떻게 [C에서 문자열을 분할 + +에서 길을 잃었어요?] (http://stackoverflow.com/questions/236129/how-to -split-a-string-in-c) –

답변

5

사용 Boost::tokenizer 당신이 수행 할 작업을 수행한다. 매뉴얼에서 :

// simple_example_1.cpp 
#include<iostream> 
#include<boost/tokenizer.hpp> 
#include<string> 

int main(){ 
    using namespace std; 
    using namespace boost; 
    string s = "This is, a test"; 
    tokenizer<> tok(s); 
    for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ 
     cout << *beg << "\n"; 
    } 
} 
+0

그것은 icc와 g ++에서 작동합니다. 당신은 부스트가 설치되어 있습니까? 오류는 무엇입니까? – Sardathrion

0

strtok() : http://www.cplusplus.com/reference/clibrary/cstring/strtok/을 사용하십시오.

내부 정적 변수를 사용하기 때문에 재진입 기능이 없다는 것을 알고 있으므로 중첩 루프 나 이와 유사한 함수에서는 두 번 호출하지 마십시오.

및 편집 :

이것은 아주 멋진 SO 공백으로 전체 문자열을 토큰 화하는 것이 해결책은 - 당신은 = 후 다시 함께 값을 처리해야 할 것이다 그러나 당신이 잘 STL :

을 가르 칠 것

Split a string in C++?

+0

strtok은 스레드로부터 안전하지 않습니다. – Sardathrion

+0

중첩 된 루프를 호출하기에 충분한 재진입이 아니라면 스레드 안전성이 보장되지 않습니다. 문자열을 분할하는 방법을 묻는 사람은 누구나 그 복잡성에 대해 걱정할 필요가 없다고 생각했습니다 : p –

+0

@ w00te strtok는 내에서 작동하지 않습니다. case ...'item = baseball bat'과 비슷한 입력을 할 수 있고 야구 방망이가 하나의 문자열이어야하기 때문에 strtok은 그것을 두 단어로 나눌 것입니다 – SNpn