Skip to content

Instantly share code, notes, and snippets.

@potados99
Created March 5, 2021 19:08
Show Gist options
  • Save potados99/6c1e081cc6d2e049f2c297a73f32b3dc to your computer and use it in GitHub Desktop.
Save potados99/6c1e081cc6d2e049f2c297a73f32b3dc to your computer and use it in GitHub Desktop.
C 문자열 자르기
/**
* 스트링을 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