본문 바로가기

프로그래머스

[프로그래머스] Lv1. 신규 아이디 추천 - 반복자 활용

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
       for (string::iterator iter = new_id.begin(); iter != new_id.end();) {
        if (*iter >= 65 && *iter <= 90) {
            *iter += 32;
        }
        ++iter;
    }

     for (string::iterator iter = new_id.begin(); iter != new_id.end();) {
         if (*iter >= 0 && *iter <= 44 || *iter == 47 ||
             *iter >= 58 && *iter <= 64 ||
             *iter >= 91 && *iter <= 94 || *iter == 96 ||
             *iter >= 123)
             iter = new_id.erase(iter);
         else
             ++iter;
        }

     for (string::iterator iter = new_id.begin(); iter != new_id.end();) {
         if (iter != new_id.begin()) {
             string::iterator prevIter = prev(iter);
             if (*prevIter == '.'&& *iter =='.')
                 iter = new_id.erase(iter);
             else
                 ++iter;
         }
         else
             ++iter;
     }   

     for (string::iterator iter = new_id.begin(); iter != new_id.end();) {
         if (*iter == '.') {
             if (iter == new_id.begin() || iter == new_id.end())
                 iter = new_id.erase(iter);
             else
                 ++iter;
         }
         else
             ++iter;
     }

     if (new_id.empty())
         new_id.append("a");

     int count = 0;
     for (string::iterator iter = new_id.begin(); iter != new_id.end();) {
         count++;
         if (count >= 16)
             iter = new_id.erase(iter);
         else
             iter++;
     }
    if (new_id.at(new_id.length() - 1) == '.')
		new_id.erase(new_id.length() - 1);

     if (new_id.length() <= 2) {
         while(new_id.length()<3)
             new_id.push_back(new_id[new_id.length() - 1]);
     }
    
    string answer = new_id;
    return answer;
}

 

string을 돌면서 한 문자씩 체크하고 for문 내에서 string내 요소를 삭제, 추가하기 위해 반복자를 활용했다.