본문 바로가기
C++ 200제/코딩 IT 정보

C++ string Split 함수, 문자열 자르기 또는 나누기

by vicddory 2019. 2. 2.
반응형

C++ string Split 함수, 문자열 자르기 또는 나누기



C++은 왜 Split 기본 함수가 없을까요? 이거 참 불만이네요. 분명히 문자열 자르기 나누기 함수를 원하는 개발자 많을 텐데요. C#은 문자열 변수 뒤에 .Split() 함수 호출할 수 있습니다. 아니면 String.Split으로 문자열 자르기 할 수 있어요.


근데 C++에는 왜 없을까요?


없으니 잘 꾸며진 소스 가져다 써야겠네요. 출처는 바로 위 스택오버플로우입니다. 아래 인용한 소스는 두 번째 답변으로 첫 번째 답변보단 저는 두 번째가 낫네요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
 
using namespace std;
 
template<typename Out>
void split(const string &s, char delim, Out result) 
{
    stringstream ss(s);
    string item;
 
    while (getline(ss, item, delim)) 
        *(result++= item;
}
 
vector<string> split(const string &s, const char delim)
{
    vector<string> elems;
    split(s, delim, back_inserter(elems));
 
    return elems;
}
 
int main()
{
    vector<string> x = split("one:two::three"':');
 
    return 0;
}
cs


위 소스를 실행하고 아래처럼 브레이크 포인트를 잡으면 문자열 나누기가 잘 된 것을 확인할 수 있습니다.


C++ string Split 함수, 문자열 자르기 또는 나누기


22번 라인의 back_inserter은 함수 이름 그대로 컨테이너의 맨 뒤에 데이터를 추가한다는 의미입니다. 10번에 선언한 split 함수로 문자열 전체, split 기준 문자, 새로 저장할 컨테이너를 전달합니다.


15, 16번 라인에서 while 문이 돌며 문자열을 분리하죠.


제가 구현하려다가 좋은 소스 있어서 그냥 이거 씁니다. 그냥 C++ 기본 함수로 포함되는 게 좋은데, 대체 이 함수는 왜 없는 걸까요.


C++ string Split 함수, 문자열 자르기 또는 나누기

반응형