혼자 공부하는 C언어 8챕터 도전실전예제
문제
키보드로부터 문장을 입력받은 후에 대문자를 찾아 소문자로 바꾸는 프로그램을 작성하세요. 바뀐 문장과 바뀐 문자의 수도 함께 출력합니다.
풀이과정:
#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;
}