본문 바로가기
언어/C언어

문자열 파싱 strtok

by 코딩히어로 2022. 1. 5.
728x90

통신의 기본 중에 데이터 파싱은 반드시 숙지하고 있어야 합니다.

많은 방법들이 있겠지만 가장 간단하고 C언어에서 지원하는 strtok라는 함수에 대해 알아보겠습니다.

 

strtok함수는 string.h 파일에 선언되어 있으며 대상이 되는 문자열에서

자르기 위한 기준이 되는 문자를 가지고 데이터를 잘라줍니다.

 

strtok(대상 문자, 자르기 위한 기준 문자);

 

strtok 함수도 여러가지 사용방법이 있지만 가장 먼저 구조를 알기 위해

하나하나 파싱 하는 방법부터 살펴보겠습니다.

 

#define <string.h>
#define <stdio.h>

unsgined char data[30] = "Hello Coding Hero";

char *ptr = strtok(data," ");

 

위 코드의 실행 결과는 무엇이 나올까요?

ptr을 출력해보면 아래와 같은 결과를 얻을 수 있습니다.

 

Hello

 

바로 공백으로 기준 문자를 정하고 자르기 때문에 Hello라는 결과를 얻을 수 있습니다.

나머지도 그럼 진행해보면 다음과 같습니다.

#define <string.h>
#define <stdio.h>

unsgined char data[30] = "Hello Coding Hero";

char *ptr = strtok(data," ");
printf("%s",ptr);
ptr = strtok(NULL," ");
printf("%s",ptr);
ptr = strtok(NULL," ");
printf("%s",ptr);

위의 실행 결과는 다음과 같이 공백을 제거한 3개의 문자로 출력이 됩니다.

 

Hello

Coding

Hero

 

여기서 주목해야 할 점은 두 번째 strtok에서 대상 문자를 NULL로 했다는 점인데

이 부분은 처음 ptr이 대상 문자를 data로 가리키고 있으면 다음 실행 때부터는 NULL로 넣어도

대상 문자가 data를 가리키고 있기 때문에 대상 문자를 변경하는 경우에만 넣어주면 됩니다.

 

이렇게 문자가 짧을 경우에는 하나하나 실행이 가능하다 해도

만약에 데이터의 문자 길이가 길어진다고 하면 너무 비효율적인 방법입니다.

 

다음은 strtok를 좀 더 효율적으로 사용하기 위한 구문입니다.

#define <string.h>
#define <stdio.h>

unsgined char data[30] = "Hello Coding Hero";

char *ptr = strtok(data," ");
printf("%s\n",ptr);

while(ptr!=NULL){
	printf("%s\n",ptr);
 	ptr = strtok(NULL," ");    
}

ptr이 NULL이라는 의미는 더 이상 파싱 할 문자가 없다는 뜻으로

문자가 끝날 때까지 반복해서 strtok를 실행합니다.

728x90
반응형

'언어 > C언어' 카테고리의 다른 글

메모리 초기화 memset 함수  (8) 2022.02.07
Struct, Union 응용  (14) 2022.01.25
switch문 다중처리  (4) 2022.01.11
Log파일 기록  (0) 2021.12.30
현재 날짜,시간 출력  (0) 2021.12.15

댓글