신규 아이디 추천
레벨 : 1
언어: c++
#include <string>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = new_id;
//1단계 : 대문자를 소문자로 변환
//문자 1개를 대문자,소문자로 바꿔주는 toupper(char) , tolower(char)를 사용
//string 전체를 바꿔주기 위해 foreach로 전체를 돌려줌
for(auto &c : answer)
c = tolower(c);
//2단계 : 특수문자 제거하기
//string.erase(n번째문자부터 , 몇개의 문자를 삭제할지) 함수를 이용하여 특수문자 삭제
string ban_char = "~!@#$%^&*()=+[{}]:?,<>/";
for(int i=0; i<answer.size(); i++)
{
for(int j=0; j<ban_char.size(); j++)
{
if(answer.at(i) == ban_char.at(j))
{
answer.erase(i,1);
i--;
break;
}
}
}
//3단계 : 연속 마침표를 하나로 치환
//두개를 비교하여 연속 .이면 하나 지움
for(int i=0; i<answer.size()-1; i++)
{
if (answer.at(i) == '.' && answer.at(i+1)=='.')
{
answer.erase(i,1);
i--;
}
}
//4단계 : 처음이나 끝이 .이면 제거
if(answer.front() == '.') answer.erase(0,1);
if(answer.back() =='.') answer.pop_back();
//5단계 : 빈 문자열이면 a 대입
if(answer.empty()) answer = "a";
//6단계 : 16자 이상이면 첫 15개문자만 표시
//이후 맨 끝이 .이면 삭제
if(answer.size() >= 16)
answer.erase(15); //15개 이후 문자를 제거
if(answer.back() == '.') answer.pop_back();
//7단계 : 길이가 2 이하면 마지막 문자를 3이 될때까지 붙임
if(answer.size() <= 2)
answer.resize(3,answer.back());
return answer;
}