철민1234 2023. 10. 23. 16:41
728x90

∙ split()

- 코딩테스트에서는 문자열을 split() 하는 로직이 많이 등장

- split 함수는 다른 프로그래밍 언어에서도 특정 문자열을 기준으로 쪼개어서 배열화시키는 함수라의 의미

- C++에서는 STL에서 지원하지 않아 만들어야 함

 

// split() 함수
// o(n)의 시간복잡도 가짐

#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> split(string input, string delimiter){
    vector<string> ret;
    long long pos = 0;
    string token = "";
    // while문이 중요하다
    // input에서 delimiter를 찾는다. 못 찾을 때까지는 루프 반복
    while ((pos = input.find(delimiter)) != string::npos){
        // 찾으면 해당 pos까지 문자열을 추출
        // ex) abcdabc에서 d를 찾았다면 pos는 3을 반환하게 되고 3만큼 substr을 해서 abc까지 추출
        token = input.substr(0, pos);
        ret.push_back(token);
        // 앞에서부터 문자열을 지운다.
        // adcd에서 d이면 pos =3 , delimiter = 1
        input.erase(0, pos + delimiter.length());
    }
    ret.push_back(input);
    return ret;
}

int main()
{
    string str = "안녕하세요 저는 C언어 천재입니다. 정말이에요!";
    string d = " ";
    
    vector<string> a = split(str, d);
    for (string b : a){
        cout << b << "\n";
    }
}