2011-02-08 2 views

답변

6

std::stringrfind()이고; 그것은 당신에게 마지막으로 .을 줄 것입니다. "100" 문자열을 얻는 것은 간단합니다. substr()입니다.

+0

및 atoi를 사용하여 문자열에서 정수를 가져옵니다. –

+3

@Benoit Thierry : 나는 실제로'stoi' 또는'lexical_cast'를 사용하고 싶습니다. –

+0

'strtol'을 원하셨습니까? 그것은 'atoi'에 대한 표준 대안입니다. – MSalters

3
const std::string s("7.8.9.1.5.1.100"); 
const size_t i = s.find_last_of("."); 
if(i != std::string::npos) 
{ 
    int a = boost::lexical_cast<int>(s.substr(i+1).c_str()); 
} 
+1

+1 : 새 분리 기호를 쉽게 추가 할 수 있기 때문에 여기에서'find_last_of'를'rfind'로 선호합니다. 'find_last_of ("., - :")' – GrahamS

1
C++ 0X 정규식을 사용하여

(또는 boost::regex)는 "^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$" 리터럴 문자열로 구성된 basic_regex으로부터 문자열을 확인합니다. 캡쳐 그룹 $1이 유용 할 것입니다.

1

업데이트 된 정보가있는 경우 아래 코드에서이 트릭을 수행해야합니다.

#include <iostream> 
#include <string> 
#include <algorithm> 
#include <cstdlib> 

int main(void) 
{ 
    std::string base("7.8.9.1.5.1."); 
    std::string check("7.8.9.1.5.1.100"); 
    if (std::equal(base.begin(), base.end(), check.begin()) && check.find('.', base.size()) == std::string::npos) 
    { 
    std::cout << "val:" << std::atoi(check.c_str() + base.size()) << std::endl; 
    } 
    return 0; 
} 

편집 : 경기 후 도트가있는 경우를 건너 업데이트는 atoi 여전히 구문 분석 .에 값을 반환했을 것이다.

+0

아니야, 그렇지 않다. 검사 할 문자열에 또 다른'.'이있을 수있다! – Benoit

+0

@ 베노아 : 어떻게 그렇게? OP가 이것이 마지막 점이라고 지정하지 않았습니까? – Oystein

+0

그는 '7.8.9.1.5.1.'로 시작하고 마지막 점 뒤에 오는 것을 얻고 싶습니다. '7.8.9.1.5.1.42.55b'와 같은 입력은 질문에 따라 금지되지 않으며 "예, foo로 시작하고 마지막 부분은 '55b'"입니다. – Benoit

관련 문제