토큰화할 문자열이 있습니다. 형식은 HHmmssff
이고 H
, m
,, f
은 자릿수입니다.역전 된 오프셋 토크 나이 자
4 자리 2 자리 숫자로 토큰 화되어 있지만, 과 같은 짧은 양식도 허용해야하므로 00000sff
으로 해석합니다. boost::tokenizer
의 offset_separator
을 사용하고 싶었지만 양의 오프셋에서만 작동하는 것으로 보이며 거꾸로 작업하고 싶습니다.
좋아, 하나의 아이디어는 왼쪽에서 0으로 문자열을 채우는 것입니다.하지만 커뮤니티에 뭔가 uber -smart가 올 수도 있습니다. ;)
편집 :추가 요구 사항이 막 시작되었습니다.
똑똑한 솔루션의 기본 요구 등 f
, ssff
, mssff
처럼, 모든 경우를 처리 할뿐만 아니라, 예를 들어 짧은 손 형태와 HH:mm:ss:ff
처럼, 더 완전한 시간 표기법을 적용했다 s:ff
또는 심지어 s:
(이 사람은 s:00
으로 해석되어야합니다.)
문자열이 :
으로 끝나는 경우 분명히 두 개의 0을 덧붙일 수 있습니다. 그런 다음 숫자 만 남겨 놓은 모든 구분 기호를 제거하고 결과 문자열을 영혼으로 구문 분석하십시오.
오프셋 된 토크 나이저를 문자열의 끝 (오프셋 -2, -4, -6, -8)으로 되돌려 놓고 어휘 적으로 숫자를 캐스팅하는 방법이 있다면 조금 더 간단 해 보입니다. int
s.
"하나의 아이디어는 왼쪽에서 0으로 문자열을 채우는 것입니다." 간단하고 빠른 작품. 왜 다른 것을 찾지? –
성능 괴물을 의미하지는 않지만이 솔루션에는 문자열 복사가 포함됩니다 (입력은 const 및 std :: string 임). – macbirdie
은 문제가되지 않아야합니다. std :: string은 대개 쓰기가 가능할만큼 똑똑하기 때문에 실제로 추가하는 경우 성능 비용 만 발생합니다. –