고흐의 연구실/C언어와 C++

[C언어] 문자열 자르기 strtok()

전고흐 2020. 8. 8. 11:40
728x90

strtok()

  • 특정문자를 기준으로 문자열을 자름
  • 헤더 : string.h
  • strtok(대상문자열, 기준문자);
    • char *strtok(char *_String, char const *_Delimiter);
    • 자른 문자열을 반환, 더 이상 자를 문자열이 없으면 NULL을 반환
char *ptr = strtok(s1, " "); // " " 공백 문자를 기준으로 문자열을 자름, 포인터 반환
while (ptr != NULL) // 자른 문자열이 나오지 않을 때까지 반복
{
      printf("%s\n", ptr); // 자른 문자열 출력
      ptr = strtok(NULL, " "); // 다음 문자열을 잘라서 포인터를 반환
}
#define _CRT_SECURE_NO_WARNINGS // strtok 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h> // strtok 함수가 선언된 헤더 파일
     int main() { char s1[30] = "2015-06-10T15:32:19"; // 크기가 30인 char형 배열을 선언하고 문자열 할당
     char *ptr = strtok(s1, "-T:"); // -, T, 콜론을 기준으로 문자열을 자름,포인터 반환
     while (ptr != NULL) // 자른 문자열이 나오지 않을 때까지 반복
     {
           printf("%s\n", ptr); // 자른 문자열 출력
           ptr = strtok(NULL, "-T:"); // 다음 문자열을 잘라서 포인터를 반환
     }
     return 0;
}
#define _CRT_SECURE_NO_WARNINGS // strtok 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <string.h> // strtok 함수가 선언된 헤더 파일
int main()
{
     char s1[30] = "The Little Prince"; // 크기가 30인 char형 배열을 선언하고 문자열 할당
     char *sArr[10] = { NULL, }; // 크기가 10인 문자열 포인터 배열을 선언하고 NULL로 초기화
     int i = 0; // 문자열 포인터 배열의 인덱스로 사용할 변수
     char *ptr = strtok(s1, " "); // 공백 문자열을 기준으로 문자열을 자름
     while (ptr != NULL) // 자른 문자열이 나오지 않을 때까지 반복
     {
           sArr[i] = ptr; // 문자열을 자른 뒤 메모리 주소를 문자열 포인터 배열에 저장
           i++; // 인덱스 증가
           ptr = strtok(NULL, " "); // 다음 문자열을 잘라서 포인터를 반환 }
           for (int i = 0; i < 10; i++)
           {
                 if (sArr[i] != NULL) // 문자열 포인터 배열의 요소가 NULL이 아닐 때만
                      printf("%s\n", sArr[i]); // 문자열 포인터 배열에 인덱스로 접근하여 각 문자열 출력
           }
     return 0;
}
728x90