libc 문자열 조작 함수 정리
C 언어에서 문자열 처리는 복잡하다. 언어 수준에서 문자열이라는 데이터 형 자체를 지원하지도 않으니, 덧셈 기호(+)나 비교연산자(==)와 같은 기호를 사용하는 직관적인 문자열 연산을 사용할 수 없기 때문이다. C 언어가 문자열 데이터 형을 지원하지 않고, 문자열을 다루는 연산자도 없으니 모든 문자열 연산은 문자열 함수를 통해 이루어진다. C 표준 라이브러리(일명 'libc')에서 str...
로 시작하는 함수들이 그것이며, 모두 string.h
헤더(C++은 cstring
헤더)에 정의되어 있으며 본 시리즈를 통해 이들 함수의 사용법을 정리해보고자 한다. 본 시리즈는 cplusplus(http://www.cplusplus.com) 및 MSDN에 나와있는 레퍼런스를 기준으로 하여 작성되었다.
- libc 문자열 조작 함수 정리 (part 01 - strcpy, strncpy)
- libc 문자열 조작 함수 정리 (part 02 - strcat, strncat)
- libc 문자열 조작 함수 정리 (part 03 - strcmp, strncmp)
- libc 문자열 조작 함수 정리 (part 04 - strchr, strrchr)
- libc 문자열 조작 함수 정리 (part 05 - strstr)
- libc 문자열 조작 함수 정리 (part 06 - strtok)
- libc 문자열 조작 함수 정리 (part 07 - strspn, strcspn)
- libc 문자열 조작 함수 정리 (part 08 - strlen)
- libc 문자열 조작 함수 정리 (part 09 - strpbrk)
- libc 문자열 조작 함수 정리 (part 10 - strxfrm, strcoll)
- libc 문자열 조작 함수 정리 (part 11 - strerror)
Part IX. strpbrk
본 포스팅에서는 문자열에서 미리 열거된 문자들 중 하나를 검색pointer break하는 함수인 strpbrk
함수에 대해 정리한다.
1. strpbrk
C++ 라이브러리에서 제공하는 헤더 파일인 cstring
에서는 검색 대상 문자열의 상수성 여부에 따라 2개의 함수가 오버로드overload되어 있다.
const char * strpbrk(const char * str1, const char * str2);
char * strpbrk(char * str1, const char * str2);
C 라이브러리에서 제공하는 헤더 파일인 string.h
에서는 하나의 함수만이 정의되어 있다.
char * strpbrk(const char * str1, const char * str2);
str1
- 검색 대상 본문이 보관된 문자열 버퍼이다.
str2
- 검색할 문자들을 열거하는 문자열 상수이다.
다음은 문자열로부터 숫자의 개수를 세는 예이다.
/* strpbrk.c */
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[])
{
char str1[512] =
"L is for the way you look at me. "
"O is for the only one I see. "
"V is very, very extraordinary. "
"E is even more than anyone that you adore.";
char str2[] = "ELOV";
char * result = NULL;
printf("Original String: \n\"%s\"\n", str1);
printf("****************************************\n");
result = strpbrk(str1, str2);
while (result != NULL)
{
printf("\"%s\"\n", result);
result = strpbrk(result + 1, str2);
}
return 0;
}
위 코드를 참조하면, 원본 문자열로부터 'E'
, 'L'
, 'O'
, 'V'
로 시작하는 부분 문자열을 구하게 된다. 원본 문자열은 대문자로 시작하는 5개의 문장으로 구성되어 있고 이 문자열에 strpbrk
를 적용하여 [그림 2]의 결과를 볼 수 있다. strpbrk
의 두 번째 매개변수(str2
)에는 'E'
, 'L'
, 'O'
, 'V'
의 4개 문자만이 지정되어 있어 각 문자로 시작되는 부분 문자열을 얻을 수 있었지만, 'A'
는 지정되지 않았으므로 마지막 문장은 출력되지 않음을 알 수 있다.
1-1. Wide Character 확장 함수 - wcspbrk
상기 strpbrk
는 ASCII 문자열 또는 UTF-8 인코딩의 Unicode 문자열에 대해 사용 가능하다. UTF-16/UTF-32와 같은 Wide Character 문자열의 복사는 아래의 함수를 사용 가능하며, wchar.h
, C++에서는 cwchar
헤더를 include
한다.
C++ 헤더인 cwchar
에는 상수성 여부에 따라 다음의 두 함수가 오버로드되어 있다.
const wchar_t * wcspbrk(const wchar_t * wcs1, const wchar_t * wcs2);
wchar_t * wcspbrk(wchar_t * wcs1, const wchar_t * wcs2);
C 헤더인 wchar.h
에는 하나의 함수만이 정의되어 있다.
wchar_t * wcspbrk(const wchar_t * str2, const wchar_t * str2);