разделить строку на основе числовых подстрок внутри - PullRequest
1 голос
/ 07 июля 2019

У меня есть строка, например,

std::string input = "Trp80Ter";

, и мне нужно разделить ее, взяв буквы до и после числового значения, получив:

std::string substring0 = "Trp";
std::string substring1 = "Ter";
int number = 80;

Более того, оно должнобыть ПЕРВЫМ числом вхождением внутри строки, потому что я также могу иметь значение как:

std::string input = "Arg305LeufsTer18";

// which I need to transform in:
std::string substring0 = "Arg";
std::string substring1 = "LeufsTer18";
int number = 305;

PS: моя первая «символьная» часть строки не всегда имеет длину 3 символа

Iнашел аналогичный вопрос , но для JS, и я не смог найти ответа при поиске в Интернете

Заранее большое спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 07 июля 2019
std::string input = "...";
std::string::size_type pos1 = input.find_first_of("0123456789");
std::string::size_type pos2 = input.find_first_not_of("0123456789", pos1);
std::string substring0 = input.substr(0, pos1);
std::string substring1 = input.substr(pos2);
int number = std::stoi(input.substr(pos1, pos2-pos1));

В качестве альтернативы, C ++ 11 и более поздние версии имеют собственную библиотеку регулярных выражений для поиска шаблонов в строках.

0 голосов
/ 07 июля 2019

А вот решение на основе Духа :

#include <string>
#include <iostream>
#include <boost/fusion/adapted/std_tuple.hpp>
#include <boost/spirit/home/x3.hpp>

int main() {
    std::string input = "Arg305LeufsTer18";
    using namespace boost::spirit::x3;
    const auto first_str = +char_("A-Za-z");
    const auto second_str = +char_("A-Za-z0-9");
    std::tuple<std::string, int, std::string> out;
    parse(input.begin(), input.end(), first_str >> int_ >> second_str, out);

    std::cout << get<0>(out) << std::endl << get<1>(out) << std::endl << get<2>(out) << std::endl;
}
...