문제
현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다. 예를 들면 아름다운 이란 뜻을 가지고 있는 beautiful 단어가 “bE au T I fu L” 과 같이 컴퓨터에 표시되고 있습니다. 위와 같이 에러로 표시되는 영어단어를 원래의 표현대로 공백을 제거하고 소문자화 시켜 출력하는 프로그램을 작성하세요.
💡 입력설명
첫 줄에 바이러스에 걸린 영어단어가 주어진다. 바이러스에 걸린 영어단어의 길이(공백포함)는 100을 넘지 않는다. 문자사이의 공백은 연속적으로 존재할 수 있습니다. 입력은 알파벳과 공 백만 주어집니다.
💡 출력설명
첫 줄에 소문자로 된 정상적인 영어단어를 출력한다.
💡 입력예제
bE au T I fu L
💡 출력예제
beautiful
코드
최종 풀이
#include <stdio.h>
int main() {
int i;
char a[100];
scanf("%[^\n]s", &a);
for (i = 0; a[i] != '\0'; i++) {
if(a[i] >= 65 && a[i] <= 90) {
printf("%c", a[i] + 32);
continue;
}
if(a[i] == ' '){
continue;
}
printf("%c", a[i]);
}
return 0;
}
설명
scanf를 통해 %s를 입력 받으면 공백문자를 받을 수 없기 때문에 scanf("%[^\n]s, %a)를 통해 공백문자를 포함하여 배열 a에 할당한다.
배열 a에서 문자열까지 순회하기 위해 item이 NULL이 아닐 때 까지 반복하는 for문을 작성한다.
이후 item이 아스키코드 65~90(대문자)에 속할 경우 item에 +32를 하여 소문자로 변환하여 출력 후 continue하여 for문을 다시 시작한다.
또한 item이 공백문자일 경우도 continue해준다. 이후 위 조건문에 해당하지 않으면 원래의 item을 출력한다.
배운 점
1. 공백문자를 포함하여 입력받고 싶을 경우 scanf("%[^n]s, &a);를 사용한다.
2. 아스키코드는 소문자(97~122), 대문자(65~90)이다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.