Created
March 5, 2021 19:08
-
-
Save potados99/6c1e081cc6d2e049f2c297a73f32b3dc to your computer and use it in GitHub Desktop.
C 문자열 자르기
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 스트링을 delimiter로 자릅니다. | |
* strtok와 비슷하게 움직입니다. | |
* | |
* @param source 원본 스트링. 원본에 수정을 가하니 주의! | |
* @param delimiter 자를 기준이 되는 문자. | |
* @return 잘린 조각 스트링의 시작 위치. | |
*/ | |
char *splitNext(char **source, char delimiter) { | |
if (!**source) { | |
return nullptr; | |
} | |
char *cursor = *source; // delimiter 나올 때까지 순회하며 이동하는 녀석. | |
char *start = *source; // 이 함수가 스트링 순회를 시작한 위치를 기억하는 녀석. | |
while (true) { | |
if (*cursor == '\0') { | |
// delimiter를 발견하지 못한 경우입니다. source를 커서 위치로 당긴 후 그냥 리턴합니다. | |
*source = cursor; | |
return start; | |
} | |
if (*cursor == delimiter) { | |
// 현재 커서가 가리키는 곳의 문자를 0으로 바꾸고 | |
*cursor = '\0'; | |
// 원본 스트링이 현재 커서 다음 위치부터 시작하도록 합니다. | |
*source = cursor + 1; | |
// 그리고 지금 잘라낸 스트링의 시작 위치를 반환합니다. | |
return start; | |
} | |
cursor++; | |
} | |
} | |
#include <stdio.h> | |
int main() { | |
char str[] = "Hello world"; | |
char *p = str; | |
char **ptr = &p; | |
char *start; | |
while ((start = splitNext(ptr, ' ')) != nullptr) { | |
printf("%s\n", start); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment