본문 바로가기
C Programming/예제 프로그램

[C Console] 문자열을 입력받아 대문자는 소문자로, 소문자는 대문자로 변환하는 프로그램

by 희품 2019. 4. 24.
반응형

문자열을 입력받아 대문자는 소문자로, 소문자는 대문자로 반환하는 프로그램 예제를 작성해보도록 하겠습니다.

영어 알파벳에 대한 부분만 고려하기로 해요.

 

다음과 같은 함수가 사용됩니다.

- 문자열을 입력받는 함수 : #include <stdio.h> gets_s();

- 문자열의 문자 개수를 반환하는 함수 : #include <string.h> strlen();

 

참고로, Windows 기준으로 gets_s() 함수는 fgets() 함수를 이용하여 만들어졌는데, C11 표준이므로 사용하셔도 문제없을 것 같아요.

 

영어 알파벳만 고려되었을 때, 아스키코드 값 32를 더해주고 빼주면서 대소문자를 변경할 수 있습니다. 다른 입력값은 그대로 출력하기 위해 조건을 주면 됩니다. '32'라는 값을 모를 때는, 같은 'A' - 'a'처럼 문자의 차를 이용하여 값을 구하고, 조건은 'A', 'Z', 'a', 'z'를 이용하면 아스키코드의 원리만 알면, 값 자체는 몰라도 프로그램을 구현할 수 있습니다.

 

문자 하나하나를 반복문으로 돌면서, 변환해주는 작업으로 프로그램을 구현하는 방법이 있습니다.

//=============================================
/**
* @file		main.c
* @brief	문자열을 입력받아
			대문자는 소문자로 변환하고,
			소문자는 대문자로 변환하는 프로그램.

* @author	fosterahope.tistory.com
*///===========================================
#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[512] = { 0 };
	int i = 0;

	printf("영어 문장을 입력하세요. ->\n");
	gets_s(str, sizeof(str));

	for (i = 0; i < (int)strlen(str); i++)
	{
		if (str[i] >= 'A' && str[i] <= 'Z')
		{
			// 대문자
			str[i] += 32;
		}
		else if (str[i] >= 'a' && str[i] <= 'z') 
		{
			// 소문자
			str[i] -= 32;
		}
	}

	printf("입력한 문자열 대/소문자 변환 ->\n");
	printf("%s\n", str);

	return 0;
}

많이 사용하는 방법으로 대문자, 소문자를 변환해주는 C 언어 표준함수를 이용하는 방법이 있습니다. 실제로는 이 방법을 많이 사용하죠.

//=============================================
/**
* @file		main.c
* @brief	문자열을 입력받아
			대문자는 소문자로 변환하고,
			소문자는 대문자로 변환하는 프로그램.

* @author	fosterahope.tistory.com
*///===========================================
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
	char str[512] = { 0 };
	int i = 0;

	printf("영어 문장을 입력하세요. ->\n");
	gets_s(str, sizeof(str));

	for (i = 0; i < (int)strlen(str); i++)
	{
		if (str[i] == tolower(str[i])) // 소문자를
		{
			str[i] = toupper(str[i]); //대문자로
		}
		else if (str[i] == toupper(str[i])) // 대문자를
		{
			str[i] = tolower(str[i]);     //소문자로
		}
	}

	printf("입력한 문자열 대/소문자 변환 ->\n");
	printf("%s\n", str);

	return 0;
}

#include <ctype.h> tolower(c) : c를 소문자로 변환

#include <ctype.h> toupper(c) : c를 대문자로 변환

 

소문자를 소문자로 변환하려고하면 아무런 변환이 이루어지지 않아요. 대문자도 마찬가지입니다.

따라서, 똑같이 반복문으로 문자 하나하나를 비교하는데, 문자를 소문자로 변환시킨 값이, 변환시키지 않은 값과 동일하면, 소문자라는 의미이니까 대문자로 변환을 합니다.

반대로 대문자로 변환한 문자가 원본 문자와 동일하면, 소문자로 변환하는 겁니다.

 

그대로 문자열 str을 출력하면서 프로그램은 종료하게 됩니다.

출력 결과

다국어 프로그램이 많은 요즘에는 크게 의미 없는 예제일 수도 있는데, C언어를 학습하는 과정으로 보시면 도움이 될 것 같습니다. 어떻게 보면 기능에 대한 reference라고 볼 수도 있죠.

 

반응형