신규 아이디 추천

108번뇌·2021년 7월 13일
0

https://programmers.co.kr/learn/courses/30/lessons/72410

#include <string>
#include <vector>

using namespace std;

string solution(string new_id)
{
	//단계 1 : 모든 대문자를대응되는 소문자로 치환한다.
	for (int i = 0; i < new_id.size(); i++)
	{
		if (new_id[i] >= 'A' && new_id[i] <= 'Z')
		{
			new_id[i] = tolower(new_id[i]);
		}
	}

	//단계 2 : 알파벳 소문자, 숫자, 빼기, 밑줄 마침표 제외한 모든 문자 제거
	for (int i = 0; i < new_id.size(); )
	{
		if ((new_id[i] >= 'a' && new_id[i] <= 'z') || (new_id[i] >= '0' && new_id[i] <= '9') || new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.')
		{
			i++;
			continue;
		}//나머지 문자들은 제외합니다.

		new_id.erase(new_id.begin() + i);//지워지고 알아서 압축된다.
	}

	//단계 3 :  . 이 2 번이상 나타나는 부분들은 .으로 치환합니다.
	char cTemp = '.';
	for (int i = 1; i < new_id.size(); )
	{
		if ((new_id[i] == cTemp) && (new_id[i - 1] == cTemp))
		{
			new_id.erase(new_id.begin() + i);
			continue;
		}
		i++;
	}

	//단계 4 : new_id 에서 마침표가 처음이나 끝에 위치한다면 제거한다.
	if (new_id.front() == '.')								new_id.erase(new_id.begin());
	if (new_id.back() == '.')							new_id.erase(new_id.end() - 1); //마지막에서 -1해준 위치이다.

	//단계 5 : 빈 문자열이라면 , "a"대입합니다.

	if (new_id.size() == 0)					new_id = "a";

	//단계 6 : 16자 이상이라면, 15개 문자 제외한 나머지 모두 제외한다. 이후 마침표가 new_id의 끄텡 위치한다면 마지막 마침표 문자 제거합니다.
	if (new_id.size() >= 16)
	{
		new_id.erase(new_id.begin() + 15, new_id.end());

		if (new_id.back() == '.')
		{
			new_id.erase(new_id.begin() + 14);
		}
	}


	// 단계 7 : 길이가 2자리 이하라면, new_id 마지막문자를 3이 될때까지 반복해서 끝에 붙인다.
	char cTemp1 = new_id[new_id.size() - 1];

	if (new_id.size() <= 2)
	{
		while (new_id.size() != 3)
		{
			new_id += cTemp1;
		}
	}

	return new_id;
}

코테에 자주 나오는 문자열 유형입니다.

1.대문자 처리하기
if (new_id[i] >= 'A' && new_id[i] <= 'Z')

2.소문자 처리하기
if (new_id[i] >= 'a' && new_id[i] <= 'z')

3.문자열 삭제
//단계 3 : . 이 2 번이상 나타나는 부분들은 .으로 치환합니다.

	char cTemp = '.';
	for (int i = 1; i < new_id.size(); )
	{
		if ((new_id[i] == cTemp) && (new_id[i - 1] == cTemp))
		{
			new_id.erase(new_id.begin() + i);
			continue;
		}
		i++;
	}

4.front / back / begin / end 사용하기
if (new_id.front() == '.') :: 주소값아님. 실제값
if (new_id.back() == '.')

new_id.begin(); :: 주소값이다.
new_id.end(); :: 주소값이다.

전체적인 문자열 다루기 문제

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글