관리 메뉴

History

strtok_s 함수를 이용해서 쉼표로 문자열을 구분해서 줄바꿈 출력하기 본문

C,C++/개념 실습 프로그래밍

strtok_s 함수를 이용해서 쉼표로 문자열을 구분해서 줄바꿈 출력하기

luckybee 2022. 9. 21. 16:40
728x90
반응형

아래와 같이 쉼표로 구분된 문자열이 있습니다. 

"Hello~! ,My name is minki kim~ ,How are you today~? ,:)"

이 문자열을 쉼표 구분해서 아래와 같은 이미지처럼 나오게 하려면 어떻게 해야 할까? 이번 차시에는 strtok_함수를 사용해서 구현해보겠다.

 

strtok_s함수는 문자열에서 지정한 문자로 문자열을 분리하는 함수이다. 이 함수는 string.h 헤더 파일을 추가하면 사용이 가능해진다. 

 

예를 들어서  "abc,def,ghi" 라는 문자열이 있을 때 , 단위로 문자열을 구분해야 한다면

 

char arr[] = "abc,def,ghi";
char delimiter[] = ",";   // 구분자로 사용할 문자열 현재는 ,를 대입하겠다.
char *p_next_pos;  // 다음 작업이 진행될 위치의 주소

char *p_token = strtok_s(str, delimiter, &p_next_pos);
// p_token에는 분리된 "abc" 문자열의 주소가 저장됨
// p_next_pos에는 arr배열의 "...,def..."에서 'd' 문자에 해당하는 주소가 저장됨

p_token = strtok_s(NULL, delimiter, &p_next_pos);
// 다음 문자열을 분리할 때는 기존 문자열을 사용하겠다는 뜻으로 첫 번째 인자에 NULL 적음
// p_token에는 분리된 "def" 문자열의 주소가 저장됨
// p_next_token에는 arr 배열의 "...,...,ghi"에서 'g' 문자에 해당하는 주소가 저장됨

p_token = strtok_s(NULL, delimiter, &p_next_pos);
// p_token에는 분리된 "ghi" 문자열의 주소가 저장됨
// p_next_token에는 arr배열에 저장된 문자열의 마지막 위치인 NULL 문자의 주소가 저장됨

이제 처음의 문자열로  코드를 구성해보면 아래와 같다.

 

#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)

int main()
{
    char arr[]="Hello~! ,My name is minki kim~ ,How are you today~? ,:)";
    char*p_next_pos;    //,다음의 위치를 찾을 주소변수
    char delimiter[]=","; //구분자 문자열
    char* p_temp_str;  //분리된 문자열
    
    p_temp_str=strtok_s(arr,delimiter,&p_next_pos); //다음 작업에서 분리된 문자열 뒤에 시작 문자가
    //위치한 주소가 저장된다.

   for(int i=1; p_temp_str; i++){  //p_temp_str가 NULL을 반환하기 전까지 반복한다.
   	 printf("%d - %s\n", i, p_temp_str);
         p_temp_str=strtok_s(NULL,delimiter,&p_next_pos);  //,를 기준으로 계속 다음 문자열을 찾고
        //구분자를 찾지 못하면 null을 반환한다. 첫번째 인자에 NULL을 쓴 이유는 기존 문자열을 사용하겠다는 
        //뜻이다.
   }
	
    return 0;

}

 

 

 

 

 

728x90
반응형
Comments