2010-01-19 7 views
7

C에서 '&'으로 문자열을 토큰으로 분할하는 방법?C에서 문자열을 토큰으로 분할하는 방법은 무엇입니까?

+1

http://stackoverflow.com/questions/266357/tokenizing-strings-in-c –

+0

이 보이는 작업"). 이것은 OP가 원하는 것일 수도 아닐 수도 있습니다. 우리는 그에게 그 사실을 설명 할 기회를 주어야합니다. 문자열이 리터럴 문자열로 분할되었거나 읽기 전용입니까? –

답변

10

strtok/strtok_r

char *token; 
char *state; 

for (token = strtok_r(input, "&", &state); 
    token != NULL; 
    token = strtok_r(NULL, "&", &state)) 
{ 
    ... 
} 
6

나는이 같은 (strchr() 사용) 할 것 :

#include <string.h> 

char *data = "this&&that&other"; 
char *next; 
char *curr = data; 
while ((next = strchr(curr, '&')) != NULL) { 
    /* process curr to next-1 */ 
    curr = next + 1; 
} 
/* process the remaining string (the last token) */ 

strchr(const char *s, int c)sc의 다음 위치에 대한 포인터를 반환 또는 NULL 'ISN c 경우 t는 s에 있습니다.

때문에 당신은, 그러나, 나는 strtok()을 좋아하지 않아, strtok()을 사용할 수 있습니다

는 문자열을 수정
  • 이 토큰 화되고는 리터럴 문자열에 대해 작동하지, 또는 매우되지 않도록, 다른 목적으로 문자열을 유지하려는 경우 유용합니다. 이 경우 문자열을 임시로 먼저 복사해야합니다.
  • 인접 분리 문자를 병합하므로 문자열이 "a&&b&c" 인 경우 "a", "b""c"이 반환됩니다. "a" 뒤에 빈 토큰이 없습니다.
  • 스레드로부터 안전하지 않습니다.
+0

또한 C 구현에 의존한다고 가정합니다. 내 시스템에서 strtok()을 호출하면 문자열 자체가 수정되지 않습니다. 사실 나는 그것이 어떻게 될지조차 모릅니다. 결국 문자열 내의 다른 토큰의 시작 부분에 대한 포인터를 생성해야합니다. –

+0

Cees Meijer :'strtok()'*는 인수 문자열을 수정합니다 - 구분 문자는 '\ 0'으로 대체되므로 반환 된 문자열은 적절하게 종료됩니다. – caf

+1

'strtok' *는 표준을 준수해야하는 경우 문자열을 수정합니다. C 표준에서 : * 이러한 문자가 발견되면 현재 문자를 끝내는 null 문자로 덮어 씁니다 *. 이것은 매우 명백합니다. http://opengroup.org/onlinepubs/009695399/functions/strtok.html. 'strtok()'가 문자열을 수정하지 않는 곳에 코드를 게시 할 수 있습니까? –

2

아래 예제와 같이 strok() 함수를 사용할 수 있습니다. 그 질문은 "말, 문제는 세부 사항에 대한 낮지 만 (리터럴 문자열을 분할에 대해하지 않습니다처럼

/// Function to parse a string in separate tokens 

int parse_string(char pInputString[MAX_STRING_LENGTH],char *Delimiter, 
        char *pToken[MAX_TOKENS]) 
{ 
    int i; 
    i = 0; 

    pToken[i] = strtok(pInputString, Delimiter); 
    i++; 

    while ((pToken[i] = strtok(NULL, Delimiter)) != NULL){ 
    i++; 
    } 
    return i; 
} 

/// The array pTokens[] now contains the pointers to the start of each token in the (unchanged) original string. 

sprintf(String,"Token1&Token2"); 
NrOfParameters = parse_string(String,"&",pTokens); 

sprintf("%s, %s",pToken[0],pToken[1]); 
관련 문제