it 취업을 위한 알고리즘 문제풀이 입문 : 7. 영어단어 복구
숫자만 추출
현수의 컴퓨터가 바이러스에 걸려 영어단어가 뛰어쓰기와 대소문자가 혼합되어 표현된다.
예를 들면 아름다운 이란 뜻을 가지고 있는 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;
}