C++ Weekly - Ep 340 - Finally! A Simple String Split in C++!
본 게시물은 위의 영상을 참조하였습니다.
그냥 유튜브 보다가 string split 해서 출력할 경우 이렇게 치면 괜찮을 것 같아 서 한번 가져와 보았다.
std::string_view 와 std::ranges::views 를 사용하는 방법이다.
std::string _view는 원본 데이터를 바꾸면 string_view의 값도 바뀐다 하지만 string_view 값을 바꾼다.
그렇다고 원본 데이터의 값이 바뀌지는 않아서 뭔가 원본 데이터의 변환 없이 쓰고 싶다면 좋은 자료형이 아닐까 생각이든다.
std::ranges 이건.. 보통 터미널에서 파이프 라인으로 쓰는 | 와 같이 자주 쓰는데 간결하고 편의성있어서 자주 사용한다고 한다.
(앞으로 자주 사용해 보도록 노력해야겠다)
코드부터 보겠다.
void do_somthing(std::string st){
auto split_strings = \
std::string_view{st} | \
std::ranges::views::split(' ');
for (const auto &s : split_strings){
std::cout << std::string_view{s.begin(), s.end()} << std::endl;
}
}
코드를 보면 파라미터인 std::string 변수인 st를 가지고 string_view 를 생성하고 이를 | 를 이용하여 std::rages::views::split 으로 넘겨준다.
그러면 공백 한칸을 기준점으로 잡고 split을 한 결과를 split_strings 변수에 반환한다.
그리고 이를 출력하면 간단하게 string 을 split 가능하다.
좀 더 짧게 하고싶으면 아래처럼 하면 되지않을까..?
void do_somthing2(std::string st){
for (const auto &s : std::string_view{st} | std::ranges::views::split(' ')){
std::cout << std::string_view{s.begin(), s.end()} << std::endl;
}
}
끝..