我需要提取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”。
答案 0 :(得分:6)
std::string
有一个rfind()
方法;这将为您提供最后一个.
从那里获得字符串substr()
是一个简单的"100"
。
答案 1 :(得分: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());
}
答案 2 :(得分:1)
使用C ++ 0x正则表达式(或boost::regex
)检查字符串与由字符串文字basic_regex
构造的"^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$"
。捕获组$1
将非常有用。
答案 3 :(得分: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
仍然会解析并将值返回到.
。