2017-12-22 52 views
-1

입력이 일정하게 형성됩니다. 예제 :C - 문자열 "mv <from><to>"을 구분 기호 "/"로 strtok을 사용하여 분할

CHAR * STR = "MV/폴더 1은/폴더 2/F1/폴더 1/폴더 3"나는 두 개의 구분 된 문자열로 오게 있도록 분할해야

,

STR1 ==/폴더 1/폴더 2/F1

STR2 ==/폴더 1/I는 폴더를 사용 strtok를 시도 3

STR ("/") 그러나이 작동하지 않을 것이다. 그것은 단락 문자 의 공백을 무시하고 "/"만을 사용합니다.

아이디어가 있으십니까?

대단히 감사합니다!

+2

가능한 중복 문자열] (https://stackoverflow.com/questions/236129/themost-elegant-way-to-iter-the-words-of-a-string) – user0042

+1

strtok는 구분 기호를 사용하므로 구분 기호로 슬래시를 사용합니다. 결함. 공백으로 나눌 필요가있는 것 같습니다. 개인적으로, 나는 strtok을 싫어한다. 왜냐하면 그것은 입력을 손상시키고 나는 보통 입력이 엉망이되지 않았기 때문이다. YMMV. –

+0

이 질문은 현재 태그가 붙어 있고 제안 된 복제본은 엄격하게 C++이므로 좋은 일치라고 분명하지 않습니다. –

답변

0

Here is a brief explanation of strtok. "/"를 입력하면 strtok에 "/"또는 ""중 하나로 분할하라는 메시지가 표시됩니다. 사실, strtok은 아마도 짝을 이루는 한 쌍의 숯을 사용하지 않을 것이기 때문에 아마도 당신의 필요에 쉽게 맞지 않을 것입니다. 그러나 쪼갤 때마다 각 숯을 사용할 것입니다. 그런 다음 함께 배치되지만 공간이있는 분할 된 항목을 재구성하는 논리를 제공해야합니다. "/"로 다시 분할 된 문자가있는 빈 토큰을 찾아서 그렇게 할 수 있습니다. 그것은 당신이 새로운 경로 문자열의 시작에 있다고 말할 것입니다. 그러나 누군가가 mv 다음에 이중 공백을 넣고 깰 수 있기 때문에 그 해결책은 그리 강력하지 않을 것이다. 대부분의 도구는 따옴표와 같은 외부 구분 기호를 사용하거나 파일 이름 및 경로의 일부인 "\"를 사용해야합니다.

0

strtok에 전달하는 두 번째 문자열은 검색 할 패턴이 아닙니다. 문자 집합이며 해당 집합의 항목 하나를 검색합니다. 이 경우

, 우리는 패턴을 검색해야하는, 그래서 우리는 함께 검색 할 수 있습니다 (하나의 가능성) strstr :

#include <string.h> 
#include <stdio.h> 

int main() { 
    char* str = "mv /Folder1/folder 2/f1 /Folder1/folder 3"; 

    char *prev = strstr(str, " /"); 
    char *pos; 
    while (NULL != prev) { 
     pos = strstr(prev+1, " /"); 
     printf("%.*s\n", (int)(pos-prev), prev); 
     prev = pos; 
    } 
} 
a의 단어를 반복하는 [가장 우아한 방법의