Необходимо извлечь последнюю цифру после точки в строке типа "7.8.9.1.5.1.100" - PullRequest
6 голосов
/ 08 февраля 2011

Мне нужно извлечь последнее число после последней точки в строке 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 ]

6 голосов
/ 08 февраля 2011

std::string имеет метод rfind();это даст вам последний . Оттуда просто substr() получить строку "100".

3 голосов
/ 08 февраля 2011
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 голос
/ 08 февраля 2011

с обновленной информацией, код ниже должен сделать трюк.

#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 все равно проанализировал бы и вернулзначение до ..

1 голос
/ 08 февраля 2011

Используя C ++ 0x регулярное выражение (или boost::regex), проверьте вашу строку на соответствие basic_regex, построенному из строкового литерала "^7\\.8\\.9\\.1\\.5\\.1\\.(?[^.]*\\.)*(\d+)$". Группа захвата $1 будет полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...