C++/기타

[C++ String] string 나누기. string split

sseram 2023. 3. 4. 21:53
반응형

C++11 ~

 

 

다른 여타 언어들과는 다르게, C++에서는 아직 string에서 바로 split을 할 수는 없다.

 

다만 몇 가지의 방법을 통해 split이 가능하다.

 

 

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

using namespace std;

vector<string> splitStr(string orig, string deli){
    vector<string> res;

    // ???

    return res;
}


int main(){
    string longString(R"(split,this,string,how)");

    auto&& SplitedStr = splitStr(longString, ",");

    for(const auto& str : SplitedStr){
        cout << str << endl;
    }
    return 0;
}

 

 

 

 

위와 같은 코드가 있고, splitStr 내부를 채운다고 하자.

 

 

 

 

 

1. find 등의 str 내부 method 이용하여 나누기.

 

 

vector<string> splitStr(string orig, string deli) {
    vector<string> res;

    size_t deliPos;
    size_t delimSize = deli.size();
    while ((deliPos = orig.find(deli)) != std::string::npos) {
        res.emplace_back(orig.substr(0, deliPos));
        orig = orig.erase(0, deliPos + delimSize);
    }

    res.push_back(orig);

    return res;
}

deli의 위치를 찾고, 해당 위치까지잘라서 res에 넣어준다.

그 후, orig의 찾은 부분을 erase 시키고 다시 deli를 찾는다.

 

 

 

2. stringstream의 방법 사용하기

 

vector<string> splitStr(string orig, string deli) {
    vector<string> res;

    stringstream strStream{ orig };
    string temp;

    // deli가 한 문자일때만 사용 가능
    char delim = deli[0];

    while (getline(strStream, temp, delim)) {
        res.push_back(temp);
    }

    return res;
}

 

 

stringstream을 빌려, strStream에 orig string을 넣고, delim까지 계속 readline 하면서 res에 각 나눈 것을 넣는다.

 

 

 

 

 

반응형

'C++ > 기타' 카테고리의 다른 글

[C++] DLL로 class export / import - 1  (0) 2023.03.16
[C++ Metaprogramming] enable_if / enable_if_t  (0) 2023.03.07
[C++ keyword] noexcept  (0) 2023.03.02
[C++ keyword] explicit 란?  (4) 2023.02.25
Virtual 소멸자 이유  (0) 2022.05.16