숫자만 추출


현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다.

예를 들면 아름다운 이란 뜻을 가지고 있는 beautiful 단어가 “bE au T I fu L” 과 같이 컴퓨터에 표시되고 있습니다.

위와 같이 에러로 표시되는 영어단어를 원래의 표현대로 공백을 제거하고 소문자화 시켜 출력하는 프로그램을 작성하세요.

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

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

▣ 입력예제 1 
bE au T I fu L

▣ 출력예제 1
beautiful


풀이

isupper이나 tolower을 사용하지 않고 풀었다.
결과 값은 다른 배열에 저장하는 것이 포인트!
결과의 위치를 pos변수로 관리하고 있다.

void solve()
{
	char str[101];
	char ret[101];
	int pos = 0;
	gets_s(str, 100);

	for (int i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == ' ')
			continue;

		if (str[i] >= 'A' && str[i] <= 'Z')
		{
			ret[pos++] = str[i] + ('a' - 'A');
		}
		else
		{
			ret[pos++] = str[i];
		}
	}
	ret[pos] = '\0';

	printf("%s\n", ret);
}

전체 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>

using namespace std;

void solve()
{
	char str[101];
	char ret[101];
	int pos = 0;
	gets_s(str, 100);

	for (int i = 0; str[i] != '\0'; i++)
	{
		if (str[i] == ' ')
			continue;

		if (str[i] >= 'A' && str[i] <= 'Z')
		{
			ret[pos++] = str[i] + ('a' - 'A');
		}
		else
		{
			ret[pos++] = str[i];
		}
	}
	ret[pos] = '\0';

	printf("%s\n", ret);
}

int main()
{
	//ios_base::sync_with_stdio(false);
	//cin.tie(NULL);
	//cout.tie(NULL);
	freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}