2013-07-04 2 views
2

구분 기호를 분할 문자열의 일부로 유지하면서 여러 구분 기호로 문자열을 분할하는 좋은 방법이 있습니까? 내가 이것을 찾은 유일한 방법은 정규 표현식을 사용하는 것이고 나는 이렇게하기 위해 다른 라이브러리를 가져올 필요가 없다. (나는 Boost를 사용하지 않고 STL을 문자열로 사용하고있다.)C++ : 여러 구분 기호로 문자열을 분할하고 결과에서 구분 기호를 유지 하시겠습니까?

+0

당신은 구분 기호가하거나 다음 일 이전의 기간에되고 싶어? (예 : CSV :'예,'예','예','예')는 – Jerry

+0

다음과 같습니다. , 그것은 정말로 중요하지 않지만, 나는 단지 그들을 다시 모을 수 있어야합니다. – toastie

+0

find_first_of() 및 substr()을 사용하여이를 달성 할 수 있지만 하나의 호출은 아닙니다 ... – Alex1985

답변

4

, 빠르거나 느린 :

vector<string> split(string& stringToSplit) 
{ 
    vector<string> result; 
    size_t pos = 0, lastPos = 0; 
    while ((pos = stringToSplit.find_first_of(";,|", lastPos)) != string::npos) 
    { 
     result.push_back(stringToSplit.substr(lastPos, pos-lastPos+1)); 
     lastPos = pos+1; 
    } 
    result.push_back(stringToSplit.substr(lastPos)); 
    return result; 
} 
1

미리보기를 사용하여이를 수행 할 수 있습니다. 쉼표 구분 기호를 들어

(?=,) 

, 그리고 (아마도 문자 클래스 : [ ... ])의 추가 표현으로 분할하면 분할 할 다른 구분 기호를.

그래서, this,is,an,example가된다 : this,is,an,example : this,is,an,example 당신은 얻을 그렇지 않으면 ((?<=,)를 의미)를 lookbehind를 사용합니다

(즉, 구분 기호를 다음과 같은 용어와 함께 간다). 이 있는지 잘 모르겠어요하지만 정규 표현식없이

관련 문제