반응형
반응형

문자열 토큰화 및 기타 검색, 로케일에 따른 문자열 비교 함수

 

문자열 토큰화 strtok

문자열 str을 구분자 delim를 기준으로 분리하여 토큰화하는 함수입니다. 재귀적으로 호출하여 문자열의 각 토큰을 추출합니다.

 

함수 원형

char *strtok(char *str, const char *delim);

 

예제

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "apple,orange,banana";
    char *token = strtok(str, ",");

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

 

실행 결과

apple
orange
banana

 

strtok을 사용해 문자열을 ,로 분리하여 각 토큰을 출력합니다.

 

 

마지막 특정 문자 찾기 strrchr 

문자열 str에서 특정 문자 c의 마지막 출현 위치를 반환하는 함수입니다.

 

함수 원형

char *strrchr(const char *str, int c);

 

예제

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello world";
    char *last_occur = strrchr(str, 'l');

    if (last_occur != NULL) {
        printf("Last occurrence of 'l' found at: %ld\n", last_occur - str);
    } else {
        printf("Character not found!\n");
    }
    return 0;
}

 

실행 결과

Last occurrence of 'l' found at: 9

 

문자열에서 문자 'l'의 마지막 위치는 인덱스 9에 있습니다.

 

 

로케일에 따른 문자열 비교 strcoll 

현재 로케일을 기준으로 두 문자열 str1과 str2를 비교하는 함수입니다.

 

함수 원형

int strcoll(const char *str1, const char *str2);

 

예제 

#include <stdio.h>
#include <string.h>
#include <locale.h>

int main() {
    setlocale(LC_COLLATE, "en_US.UTF-8");
    char *str1 = "abc";
    char *str2 = "ABC";

    int result = strcoll(str1, str2);
    if (result == 0) {
        printf("Strings are equal.\n");
    } else {
        printf("Strings are not equal.\n");
    }
    return 0;
}

 

실행 결과

Strings are not equal.

 

strcoll 함수는 로케일에 따라 두 문자열을 비교하여 대소문자 구분 여부를 결정합니다.

 


 

로케일

로케일(Locale)은 소프트웨어가 언어, 국가, 문화적인 요소에 따라 다르게 동작할 수 있도록 설정하는 환경 변수를 말합니다. 로케일은 프로그램이 다음과 같은 동작을 현지화(지역화)할 수 있게 해줍니다.

 

  1. 문자열 정렬과 비교: 알파벳의 정렬 순서나 대소문자 비교를 현지 언어 규칙에 따라 처리합니다.
  2. 날짜와 시간 형식: 날짜와 시간의 형식(예: "YYYY-MM-DD" vs "DD/MM/YYYY")을 해당 문화권의 표준에 맞게 표시합니다.
  3. 숫자와 통화 형식: 소수점, 천 단위 구분자, 통화 기호 등을 지역에 맞게 표시합니다.
  4. 문자 입력 및 출력: 텍스트 인코딩과 키보드 입력 방식을 지역에 맞게 설정합니다.

 

로케일의 구성 요소

로케일은 일반적으로 아래와 같은 형식으로 구성됩니다:
language[_territory][.codeset][@modifier]

 

예를 들어, en_US.UTF-8 로케일은 다음과 같은 의미를 가집니다:

  • en: 언어 (English, 영어)
  • US: 지역 또는 국가 (United States, 미국)
  • UTF-8: 문자 인코딩 (UTF-8)
  • @modifier: 추가적인 수정자가 있을 수 있습니다 (예: @euro).
반응형