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
반응형