2012-02-17 4 views
2

공백과 문장 부호가 포함 된 C++을 사용하여 문자열을 분할하고 싶습니다.공백과 문장 부호가있는 C++ 분할 문자열

str = "This is a dog; A very good one."

내가 얻을 싶어 "이" "" "A" "개" "A" "아주" "좋은" "한"1 1.

에 의해 그것은 의 getline을 사용하여 구분 기호 하나에 아주 쉽게이다하지만 모든 구분 기호를 모르겠습니다. 구두점 문자가 될 수 있습니다.

참고 : Boost를 사용하고 싶지 않습니다.

+0

모든 편지를 알고 있습니다. 맞습니까? 따라서 편지가 아닌 것을 발견하면 구분 기호로 간주하십시오. –

+0

가능한 복제본 [C++에서 문자열을 토큰 화하는 방법] (http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) –

답변

2

을 나는 이것이 가장 좋은 방법이라고 주장 아니지만, 그것을 작동합니다.

auto it = std::find_if(str.begin(), str.end(), [] (const char element) -> bool { 
         return std::isspace(element) || std::ispunct(element);}) 
3

그래서 첫 번째 위치에서 시작하여 유효한 첫 번째 토큰을 찾습니다. 당신이

delimIndex = str.substr (index).find_first_of (yourDelimiters); 

을 할 수 있도록 귀하의 첫 번째 단어가 다음 다음

// since delimIndex will essentially be the length of the word 
word = str.substr (index, delimIndex); 

당신이 당신의 문자열을 잘라야 할 것이다,이 후 첫 번째 구분 기호를 찾아 다음

index = str.find_first_not_of (yourDelimiters); 

를 당신이 사용할 수 있습니다 반복하십시오. find_first_not_of와 find_first_of가 npos를 반환하는 모든 경우를 처리해야합니다. 즉, 문자가 발견되었거나 발견되지 않았 음을 의미하지만, 시작하는 것으로 충분하다고 생각합니다.

, BTW 구분 기호를 찾기 위해 람다와 함께 사용 std::find_if() ...

+1

그는 알지 못합니다. 구분자 (delimiter)가 될 것입니다. –

0

vmpstr의 솔루션이 작동하지만 약간 지루할 수 있습니다. 몇 달 전에, 나는 당신이 원하는 것을하는 C 라이브러리를 썼다. http://wiki.gosub100.com/doku.php?id=librerias:c:cadenas

설명서가 스페인어 (미안)로 작성되었습니다.

외부 종속성이 필요하지 않습니다. splitWithChar() 함수를 사용해보십시오. 사용

예 :

원래 문자열 "yourString"가 사용 spliWithChar() 후에 수정
#include "string_functions.h" 
int main(void){ 

    char yourString[]= "This is a dog; A very good one."; 
    char* elementsArray[8]; 
    int nElements; 
    int i; 

    /*------------------------------------------------------------*/ 
    printf("Character split test:\n"); 
    printf("Base String: %s\n",yourString); 

    nElements = splitWithChar(yourString, ' ', elementsArray); 

    printf("Found %d element.\n", nElements); 

    for (i=0;i<nElements;i++){ 
     printf ("Element %d: %s\n", i, elementsArray[i]); 
    } 

    return 0; 
} 

때문에 자르 될.

행운을 빌어 요.