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
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