"7.8.9.1.5.1.100"과 같은 C++ 문자열에서 마지막 점 뒤의 마지막 숫자를 추출하여 저장해야합니다 정수 ??"7.8.9.1.5.1.100"과 같은 문자열에서 점 뒤에 마지막 숫자를 추출해야합니다.
추가 : 이 문자열은 "7.8.9.1.5.1.1"또는 "7.8.9.1.5.1.0"이 될 수도 있습니다.
마지막 점 앞에 정확하게 "7.8.9.1.5.1"임을 검증하고 싶습니다.
"7.8.9.1.5.1.100"과 같은 C++ 문자열에서 마지막 점 뒤의 마지막 숫자를 추출하여 저장해야합니다 정수 ??"7.8.9.1.5.1.100"과 같은 문자열에서 점 뒤에 마지막 숫자를 추출해야합니다.
추가 : 이 문자열은 "7.8.9.1.5.1.1"또는 "7.8.9.1.5.1.0"이 될 수도 있습니다.
마지막 점 앞에 정확하게 "7.8.9.1.5.1"임을 검증하고 싶습니다.
std::string
은 rfind()
이고; 그것은 당신에게 마지막으로 .
을 줄 것입니다. "100"
문자열을 얻는 것은 간단합니다. substr()
입니다.
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 : 새 분리 기호를 쉽게 추가 할 수 있기 때문에 여기에서'find_last_of'를'rfind'로 선호합니다. 'find_last_of ("., - :")' – GrahamS
(또는 boost::regex
)는 "^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$"
리터럴 문자열로 구성된 basic_regex
으로부터 문자열을 확인합니다. 캡쳐 그룹 $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
여전히 구문 분석 .
에 값을 반환했을 것이다.
및 atoi를 사용하여 문자열에서 정수를 가져옵니다. –
@Benoit Thierry : 나는 실제로'stoi' 또는'lexical_cast'를 사용하고 싶습니다. –
'strtol'을 원하셨습니까? 그것은 'atoi'에 대한 표준 대안입니다. – MSalters