Make Unreal REAL.
article thumbnail
Level 0. 세 개의 구분자

 

 

C스타일 strtok() 함수를 이용해 해결했는데, 쓸데없이 번거롭게 푼 것 같다.

 

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

vector<string> solution(string myStr)
{
    vector<string> answer;
    const char *str = myStr.c_str(), *delim = "abc";
    char *s = new char[strlen(str) + 1], *p;

    copy(str, str + strlen(str) + 1, s);
    p = strtok(s, delim);

    while (p)
    {
        answer.emplace_back(p);

        p = strtok(nullptr, delim);
    }

    delete s;

    return answer.empty() ? vector<string>{"EMPTY"} : answer;
}

 

find_first_not_of() 함수와 find_first_of() 함수로 부분 문자열의 시작과 끝 부분 구분자의 위치를 찾아 해결했다.

 

#include <iostream>
#include <vector>

using namespace std;

vector<string> solution(string myStr)
{
    vector<string> answer;
    size_t last = 0;
    
    do
    {
        size_t first = myStr.find_first_not_of("abc", last);
        last = myStr.find_first_of("abc", first);

        if (first != string::npos)
            answer.emplace_back(myStr.substr(first, last - first));
    }
    while (last != string::npos);

    return answer.empty() ? vector<string>{"EMPTY"} : answer;
}

 

a, b, c 구분자를 모두 공백으로 변경한 후, istringstream을 통해 해결해도 된다.

 

#include <iostream>
#include <vector>
#include <regex>
#include <sstream>

using namespace std;

vector<string> solution(string myStr)
{
    vector<string> answer;
    string s = regex_replace(myStr, regex("[a, b, c]"), " ");
    istringstream iss(s);

    while (iss >> s)
        answer.emplace_back(s);

    return answer.empty() ? vector<string>{"EMPTY"} : answer;
}
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그