728x90
반응형
질문 : C ++에서 문자열을 어떻게 토큰화 합니까?
Java에는 편리한 분할 방법이 있습니다.
String str = "The quick brown fox";
String[] results = str.split(" ");
C ++에서이 작업을 수행하는 쉬운 방법이 있습니까?
답변
C ++ 표준 라이브러리 알고리즘은 콘크리트 컨테이너가 아닌 반복자를 기반으로하는 매우 보편적입니다. split
기능을 제공하기가 어렵습니다. 비록 아무도 이것이 편리하다고 주장하지 않더라도 말입니다. 그러나 반환 유형은 무엇입니까? std::vector<std::basic_string<…>>
? 그럴 수도 있지만 (잠재적으로 중복되고 비용이 많이 드는) 할당을 수행해야합니다.
대신 C ++는 임의적으로 복잡한 구분 기호를 기반으로 문자열을 분할하는 다양한 방법을 제공하지만 다른 언어만큼 멋지게 캡슐화되지는 않습니다. 다양한 방법으로 전체 블로그 게시물을 채 웁니다 .
가장 간단하게 std::string::find
std::string::npos
때까지 std::string::substr
사용하여 내용을 추출 할 수 있습니다.
공백으로 분할하기위한보다 유동적 인 (관용적이지만 기본적인) 버전은 std::istringstream
사용합니다.
auto iss = std::istringstream{"The quick brown fox"};
auto str = std::string{};
while (iss >> str) {
process(str);
}
std::istream_iterator
s를 사용하면 반복기 범위 생성자를 사용하여 문자열 스트림의 내용을 벡터로 복사 할 수도 있습니다.
여러 라이브러리 (예 : Boost.Tokenizer)는 특정 토크 나이저를 제공합니다.
고급 분할에는 정규 표현식이 필요합니다. C ++는 특히 이러한 목적을 위해 std::regex_token_iterator
auto const str = "The quick brown fox"s;
auto const re = std::regex{R"(\s+)"};
auto const vec = std::vector<std::string>(
std::sregex_token_iterator{begin(str), end(str), re, -1},
std::sregex_token_iterator{}
);
출처 : https://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C ++에서 'struct'와 'typedef struct'의 차이점 (0) | 2021.06.26 |
---|---|
C ++에서 배열 사용 방법 (0) | 2021.06.25 |
dash를 제외한 문자열에서 영숫자가 아닌 모든 문자를 제거하는 방법 (0) | 2021.06.17 |
C ++에서 클래스와 구조체 사용시기 (0) | 2021.06.15 |
C / C ++에서 "->"연산자가 의미하는 것 (0) | 2021.06.15 |