코딩 공부 5
문제
설명
- 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 만드는 문제
코드
#include <string>
#include <vector>
#include <cctype>
#include <regex>
using namespace std;
// 모든 대문자를 대응되는 소문자로 치환합니다.
string first(string s) {
for (char &c : s) {
if (isalpha(c) && isupper(c)) {
c = tolower(c);
}
}
return s;
}
// 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
string second(string s) {
regex re("[^a-z0-9\-_.]");
return regex_replace(s, re, "");
}
// 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
string third(string s) {
regex re("\\.{2,}");
return regex_replace(s, re, ".");
}
// 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
string fourth(string s) {
regex re("^\\.?(.*?)\\.?$");
return regex_replace(s, re, "$1");
}
// 빈 문자열이라면, new_id에 "a"를 대입합니다.
string fifth(string s) {
if (s.size() == 0) {
s = "a";
}
return s;
}
// 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
// 만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
string sixth(string s) {
if (s.size() >= 16) {
s = s.substr(0, 15);
regex re("(.*?)\\.?$");
s = regex_replace(s, re, "$1");
}
return s;
}
// 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
string seventh(string s) {
if (s.size() <= 2) {
auto tmp = s.substr(s.size()-1);
while (s.size() < 3) {
s += tmp;
}
}
return s;
}
string solution(string new_id) {
string answer = "";
answer = first(new_id);
answer = second(answer);
answer = third(answer);
answer = fourth(answer);
answer = fifth(answer);
answer = sixth(answer);
answer = seventh(answer);
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요