需要在像“7.8.9.1.5.1.100”这样的字符串中的点之后提取最后一个数字

时间:2011-02-08 12:25:05

标签: c++ string

我需要提取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”。

4 个答案:

答案 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仍然会解析并将值返回到.