부스트 스피릿을 사용하여 "ABC10DEF20"
과 같은 문자열을 ["ABC", 10, "DEF", 20]
으로 변환하려고합니다. "undelimited"가 올바른 용어인지 확실하지 않지만 공백이나 다른 구분 문자로 구분하는 대신 정수와 비 정수의 경계로 구분하고 싶습니다. [ 65, 66, 67, 10, 68, 69, 70, 20 ]
결과이 입력 "ABC10DEF20"
(끈없이 바로 정수와 정수에 저장되어있는 문자열 부분의 ASCII 구성 요소)의 경우부스트 스피릿을 사용하여 채워지지 않은 문자열과 정수 추출하기
std::string search_str = "ABC10DEF20";
std::vector<boost::variant<std::string, unsigned int> > v;
std::string::const_iterator iter = search_str.begin();
std::string::const_iterator last = search_str.end();
bool r = parse(iter, last,
+(+(char_ - digit)|uint_),
v);
:
내가 좋아하는 코드로 왔어요. 입력 "10"
에 대해서는 내가 의도 한대로 [ 10 ]
이됩니다.
이 상기 룰 변경 결과를 만드는 '[65, 66, 67, 49, 48, 68, 69, 70, 50, 48]'그래서 실제로는 정수가 ASCII 문자로 들어 오기 때문에 더 나쁩니다. – eco
또한 + char_는 std :: string으로 변환해야합니다. Boost Spirit 문서에서는 여러 번 작업을 수행합니다. – eco
만약 당신이'digit'에 우선 순위를 부여한다면? 즉'digit - + char_'입니까? –