C 언어에서 여러 개의 문자(character)가 배열 형태로 연결된 것을 문자열(string)이라고 합니다. 이번 글에서는 문자열의 선언과 초기화 방법을 먼저 짚어본 뒤, 문자열 속 모음(vowel)만 골라 대문자 또는 소문자로 변환하는 C 프로그램을 예제 코드와 함께 단계별로 살펴보겠습니다.
문자열 선언
문자 배열의 기본 선언 형식은 다음과 같습니다.
char stringname [size];
예를 들어 char a[50];이라고 선언하면 최대 50글자를 저장할 수 있는 문자열이 만들어집니다.
문자열 초기화
문자열을 초기화하는 방법은 크게 두 가지가 있습니다.
- 문자 상수를 하나씩 나열하는 방법
char a[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };
- 문자열 상수를 그대로 대입하는 방법
char a[10] = "Hello";
문자열의 끝에는 반드시 널 문자('\0')가 붙어야 한다는 점에 유의하세요.
문자열 접근
문자열을 입력·출력할 때는 제어 문자 "%s"를 사용하며, 이는 널 문자('\0')를 만날 때까지 문자열 전체를 한 번에 처리해 줍니다.
모음 변환 로직
문자열을 처음부터 끝까지 한 글자씩 훑으면서 해당 문자가 소문자 모음(a, e, i, o, u)인지 검사하고, 해당되면 toupper() 함수를 호출해 대문자로 바꿔 주는 방식입니다.
for(i=0;string[i]!='\0';i++){
if(string[i]=='a'||string[i]=='e'||string[i]=='i'||string[i]=='o'||string[i]=='u'){
string[i]=toupper(string[i]);
}
}
printf("The result string with converted vowels is : ");
puts(string);
toupper() 함수를 사용하려면 헤더 파일 <ctype.h>를 반드시 포함해야 합니다.
전체 프로그램
다음은 위 로직을 적용해 문자열 속 소문자 모음을 모두 대문자로 변환하는 완성된 C 프로그램입니다.
#include<stdio.h>
#include<ctype.h>
void main(){
// 각 문자 위치를 읽기 위한 변수와 문자열 선언 //
int i;
char string[40];
// 문자열 입력 //
printf("Enter the string : ");
gets(string);
// 문자열의 각 문자를 순서대로 검사하는 for 루프 //
for(i=0;string[i]!='\0';i++){
if(string[i]=='a'||string[i]=='e'||string[i]=='i'||string[i]=='o'||string[i]=='u'){
string[i]=toupper(string[i]);
}
}
printf("The result string with converted vowels is : ");
puts(string);
}
참고로 gets()는 입력 길이를 제한할 수 없어 버퍼 오버플로 위험이 있어 현행 C 표준에서는 제외된 함수입니다. 실제 프로젝트에서는 fgets() 사용을 권장합니다.
실행 결과
위 프로그램을 컴파일해 실행하면 다음과 같은 결과를 확인할 수 있습니다.
Run 1: Enter the string : TutoRialsPoint The result string with converted vowels is : TUtORIAlsPOInt Run 2: Enter the string : c programming The result string with converted vowels is : c prOgrAmmIng
첫 번째 실행에서는 입력 문자열에 포함된 소문자 모음(u, o, i, a)만 대문자로 바뀌었고, 이미 대문자였던 R, P나 자음은 그대로 유지된 것을 볼 수 있습니다. 두 번째 실행에서도 마찬가지로 'c programming' 속 소문자 모음 o, a, i만 각각 O, A, I로 변환되었습니다.