고줭 2021. 5. 12. 00:03

문제

현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다.
예를 들면 아름다운 이란 뜻을 가지고 있는 beautiful 단어가 “bE au T I fu L” 과 같이 컴퓨터에 표시되고 있습니다.
위와 같이 에러로 표시되는 영어단어를 원래의 표현대로 공백을 제거하고 소문자화 시켜 출력하는 프로그램을 작성하세요.

입력설명

첫 줄에 바이러스에 걸린 영어단어가 주어진다. 바이러스에 걸린 영어단어의 길이(공백포함)는 100을 넘지 않는다. 문자사이의 공백은 연속적으로 존재할 수 있습니다. 입력은 알파벳과 공백만 주어집니다.

출력설명

첫 줄에 소문자로 된 정상적인 영어단어를 출력한다.

입력예제

bE   au   T  I   fu    L

출력예제

beautiful


#include <stdio.h>
using namespace std;

int main(){
	freopen("input.txt", "rt", stdin);
	char input[101], output[101];
	int i, index=0;
	gets(input);
	
	for(i=0; input[i]!='\0'; i++){
		if(input[i] != ' '){
			if(input[i] >= 65 && input[i] <= 90){
				output[index++] = input[i] + 32;
			} else {
				output[index++] = input[i];
			}
		}
	}
	output[index]='\0';
	printf("%s", output);
	
	return 0;
}

이번엔 scanf()가 아니라 gets로 받았습니다. 공백이 있는 문자를 받을땐 gets로 받아야 한다고 합니다.

문자열은 100을 넘지 않는다고 하지만 전 항상 1정도는 더 넣습니다.
선생님이 쓰신 변수랑은 다르게 나름 제 방식대로 써봤는데 가독성이 좋을지는 모르겠습니다.

문제 풀이의 핵심은 대문자와 소문자의 아스키코드가 아닐까 합니다.
대문자는 65이상 90이하이고 대문자에 + 32을 하면 소문자가 됩니다.

문자배열이므로 for문이 끝나고 output[index] ='\0'; 하는걸 잊지말아야 할듯 합니다.