반응형
토큰을 사용하여 C ++ std :: string 분할 (예 : ";")
중복 가능성 :
C ++에서 문자열을 분할하는 방법은 무엇입니까?
C ++에서 문자열을 분할하는 가장 좋은 방법은 무엇입니까? 문자열은로 구분 된 단어로 구성되어 있다고 가정 할 수 있습니다.
우리의 가이드 라인 관점에서 C 문자열 기능은 허용되지 않으며 보안 관련 오픈 소스가 허용되지 않기 때문에 Boost도 사용할 수 없습니다.
내가 지금 가지고있는 최선의 해결책은 :
string str ( "denmark; sweden; india; us");
위의 str은 벡터에 문자열로 저장되어야합니다. 우리는 이것을 어떻게 달성 할 수 있습니까?
입력 해 주셔서 감사합니다.
나는 std::getline()
종종 가장 간단하다고 생각합니다. 선택적 구분자 매개 변수는 단순히 "줄"을 읽기위한 것이 아니라는 것을 의미합니다.
#include <sstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> strings;
istringstream f("denmark;sweden;india;us");
string s;
while (getline(f, s, ';')) {
cout << s << endl;
strings.push_back(s);
}
}
문자열 스트림을 사용하고 요소를 벡터로 읽을 수 있습니다.
다음 은 다양한 예입니다 ...
예 중 하나의 사본 :
std::vector<std::string> split(const std::string& s, char seperator)
{
std::vector<std::string> output;
std::string::size_type prev_pos = 0, pos = 0;
while((pos = s.find(seperator, pos)) != std::string::npos)
{
std::string substring( s.substr(prev_pos, pos-prev_pos) );
output.push_back(substring);
prev_pos = ++pos;
}
output.push_back(s.substr(prev_pos, pos-prev_pos)); // Last word
return output;
}
이 문제를 해결할 수있는 여러 라이브러리가 있지만 가장 간단한 방법은 Boost Tokenizer를 사용하는 것입니다.
#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/foreach.hpp>
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
std::string str("denmark;sweden;india;us");
boost::char_separator<char> sep(";");
tokenizer tokens(str, sep);
BOOST_FOREACH(std::string const& token, tokens)
{
std::cout << "<" << *tok_iter << "> " << "\n";
}
참고 URL : https://stackoverflow.com/questions/5167625/splitting-ac-stdstring-using-tokens-eg
반응형
'development' 카테고리의 다른 글
다른 문자열에서 첫 번째 부분 문자열을 제거하는 가장 간단한 방법 (0) | 2020.10.28 |
---|---|
jQuery 토글 CSS? (0) | 2020.10.28 |
Android에서 활성 장치 관리자가 활성화 된 앱을 제거하는 방법은 무엇입니까? (0) | 2020.10.28 |
git 프록시 비밀번호에서 @ 문자 이스케이프 (0) | 2020.10.28 |
Android 리소스와 리소스 ID 간의 매핑은 어떻게 작동합니까? (0) | 2020.10.28 |