2012-06-18 5 views
6

나는 내가 좋아하는 strtok를의 버전을 필요가 있다고 생각 :C++ 문자열을 역순으로 strtok하는 방법?

char* p = rstrtok(str, delimeters); 

예를 들어, 순차적으로 위치를 얻을 문자열의 '-', '_''+' "안녕하세요 + stack_over 흐름"은을 사용하여 "+ _-"의 분리 문자 세트

나는 단지 분리 문자, 그들의 위치, (하지의 내용)에 대해 신경, 그래서 나는추측이 여기에 적합하지 않습니다.

내가 활용할 수있는 유틸리티 유틸리티가 있습니까? 또는 이런 종류의 상황을 처리 할 수있는 솔루션?
게다가, C++을하고 있기 때문에이 오래된 패션 C를 피하기위한 편리한 접근법이 있습니까?

는 (I는 "역 strtok를"을 검색하지만 단지 ... "흐름 스택을 통해"물건 "흐름을 통해 스택"GET) 당신은 strrchr를 사용하여 자신의 롤 수

+1

가있다 기능을 제공합니다. 루프를 사용해야한다고 생각합니다. – nhahtdh

답변

3

당신은 strpbrk이 할 수 있습니다 :

char string[] = "hello+stack_over-flow"; 

char *pos = string; 
while (*pos != '\0' && (pos = strpbrk(pos, "+-_")) != NULL) 
{ 
    /* Do something with `pos` */ 

    pos++; /* To skip over the found character */ 
} 
+0

감사합니다 @ jo, 나는 strpbrk을 좋아한다고 생각하지만 거기에 그것의 반전 버전입니까? 또는 나는 문자열을 먼저 뒤집어 이것을 사용할 것이다.희망은 코드 검토를 통과 할 것입니다 ... – Lyn

+0

@Lyn 제가 아는 한, 역방향 버전이 없으므로, 불행히도 먼저 문자열을 뒤집어 야합니다. –

8

.

C++ 스타일 std::string을 사용하는 경우 string::find_last_of을 활용할 수 있습니다.

+0

덕분에 @dirk, string :: find_last_of는 좋지만 매번 구분 기호 모음을 반복해야합니다. 꼬리에 가장 가까운 사람을보기 위해 거리를 비교하십시오. – Lyn

+0

@Lyn : 질문에 명시되지 않았습니다. 귀하의 질문을 편집하고 귀하의 결과물에 * 정확하게 * 기입 할 수 있습니까? – dirkgently

+0

내 자신을 방어해야한다고 생각합니다 ... 예제와 출력은 "delimeter set을 사용하여"hello + stack_over-flow "문자열에서 '-', '_'및 '+'의 위치를 ​​순차적으로 얻습니다 "+ _-" "; 또한, 우리 모두는 부담스럽고 ​​오류가 발생하기 쉬운 방식으로 일을하고 싶습니다. – Lyn

0

strtok를 가장 기본적인 버전에서 아주 간단합니다 - 부부에게 백 개 라인을 대부분에서. "strtok filetype : c"라고하면 다양한 라이브러리에서 어떻게 구현되는지 확인할 수 있습니다.

매우 순진한 해결책은 문자열을 먼저 뒤집은 다음 strtok()을 수행하는 것입니다. 긴 문자열에는 좋지 않지만 성능이 필요한 경우에는 strtok()을 사용하십시오. 이 같은

뭔가 :

void reverse(char* dest, const char* src) 
{ 
    int len = strlen(src); 
    int i; 
    for(i = 0; i < len; ++i) 
     dest[len-i-1] = src[i]; 
} 

편집 :

은 공교롭게도

나는 구글 검색 탭에서 열린이 박사 돕 스는 페이지가 어제 : 나는 생각하지 않는다 http://www.drdobbs.com/conversations-al-go-rithms/184403801

관련 문제