C에서 문자열을 소문자로 변환

Jinku Hu 2023년10월12일
  1. tolower 함수를 사용하여 C에서 문자열을 소문자로 변환
  2. 사용자 지정 함수를 사용하여 C에서 문자열을 소문자로 변환
C에서 문자열을 소문자로 변환

이 기사에서는 C에서 문자열을 소문자로 변환하는 방법에 대한 여러 방법을 보여줍니다.

tolower 함수를 사용하여 C에서 문자열을 소문자로 변환

tolower 함수는<ctype.h>헤더 파일에 정의 된 C 표준 라이브러리의 일부입니다. tolower는 하나의int 유형 인수를 취하고 해당 소문자 표현이있는 경우 주어진 문자의 변환 된 값을 반환합니다. 전달 된 문자는 EOF 또는 unsigned char유형을 표현할 수 있어야합니다. 이 경우 문자열 리터럴 값으로char 포인터를 초기화 한 다음 각 문자를 반복하여 소문자 값으로 변환합니다. 하지만char 유형 인수를tolower 함수에 전달하는 것은unsigned char로 캐스트되어야합니다.

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

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  for (size_t i = 0; i < strlen(str); ++i) {
    printf("%c", tolower((unsigned char)str[i]));
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

출력:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

이전 예제 코드는 원래 문자열의 내용을 변환 된 소문자로 덮어 씁니다. 또는calloc을 사용하여 다른char 포인터를 할당 할 수 있는데, 이는 할당 된 메모리를 0으로 만들고 변환 된 문자열을 별도로 저장한다는 점을 제외하면malloc과 유사합니다. 포인터는 프로그램이 종료되기 전에 해제되어야합니다. 또는 프로세스가 장기 실행중인 경우 문자열 변수가 필요하지 않은 즉시 해제되어야합니다.

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

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);

  size_t len = strlen(str);
  char *lower = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    lower[i] = tolower((unsigned char)str[i]);
  }
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

출력:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

사용자 지정 함수를 사용하여 C에서 문자열을 소문자로 변환

보다 유연한 솔루션은 문자열 변수를 인수로 사용하고 변환 된 소문자 문자열을 별도의 메모리 위치에 반환하는 사용자 지정 함수를 구현하는 것입니다. 이 방법은 본질적으로main 함수에서 이전 예제를 분리 한 것입니다. 여기서는 null로 끝나는 문자열이 저장되고 문자열의 길이를 나타내는 size_t유형의 정수인 ‘char *‘를 취하는 toLower함수를 만들었습니다. 이 함수는calloc 함수를 사용하여 힙에 메모리를 할당합니다. 따라서 호출자는 프로그램이 종료되기 전에 메모리 할당을 해제해야합니다.

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

char *toLower(char *str, size_t len) {
  char *str_l = calloc(len + 1, sizeof(char));

  for (size_t i = 0; i < len; ++i) {
    str_l[i] = tolower((unsigned char)str[i]);
  }
  return str_l;
}

int main() {
  char *str = "THIS STRING LITERAL IS ARBITRARY";

  printf("%s\n", str);
  size_t len = strlen(str);

  char *lower = toLower(str, len);
  printf("%s", lower);
  free(lower);

  exit(EXIT_SUCCESS);
}

출력:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C String