문제

키보드로부터 문장을 입력받은 후에 대문자를 찾아 소문자로 바꾸는 프로그램을 작성하세요. 바뀐 문장과 바뀐 문자의 수도 함께 출력합니다.


풀이과정:

#include <stdio.h>
#include <string.h>
int main(void) {

	char str[80];
  // 79개 이하의 문자를 저장할 문자열 선언
	char large_str[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	char small_str[27] = "abcdefghijklmnopqrstuvwxyz";
  // 문자열의 특성상, 문자열의 마지막에는 null이 들어가야 하므로
  // 알파벳의 갯수 26에 1을 더해준다.
	int change_count = 0;
  // 바뀐 문자 수를 저장할 변수 선언

	printf("문장 입력 : ");
	gets(str);
  //문자열 초기화

	for (int i = 0; i < 79; i++) {
		for (int j = 0; j < 26; j++) {
			if (str[i] == large_str[j]) {
				str[i] = small_str[j];
        // 문자열에 들어가 문자를 하나씩 검사하고 대문자면 소문자로 바꿈 
				change_count++;
			}
		}
	}

	printf("바뀐 문장 : %s\n", str);
	printf("바뀐 문자 수 : %d", change_count);

	return 0;
}

이번엔 알파벳의 아스키코드값을 이용한 풀이를 통해 중첩반복문을 사용하지 않아도 푸는 방법을 생각해 보았다.

#include <stdio.h>
#include <string.h>
int main(void) {

	char str[80];
	int change_count = 0;

	printf("문장 입력 : ");
	gets(str);

	for (int i = 0; i < 79; i++) {
		if (str[i] >= 65 && str[i] <= 90) {
    //아스키 코드의 65~90은 A~Z에 해당한다.
			str[i] += 32;
      //아스키 코드의 A~Z와 a~z는 각각의 알파벳이 32의 차이로 배열되어 있다.
			change_count++;
		}
	}

	printf("바뀐 문장 : %s\n", str);
	printf("바뀐 문자 수 : %d", change_count);

	return 0;
}

Tags:

Updated: